Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Palettien käyttö javassa?

Paulus M [07.03.2006 16:50:59]

#

Osaisko joku kertoa miten pystyisin muuttamaan väri skaalaa pienemmeksi, vaikka sillain et paletti sisältäisi sellaiset 64 väriä. Tämä saisi kuvien kokoa pienemmäksi.

Ja miten asetan vaikka kuvalle "kuva.jpg" tekemäni paletin.
Olen koittanu selvittää tätä, mutta en ole oikein ymmärtänyt englannin kielisesti kommentoituja laajoja koodipätkiä, mitä olen löytänyt netistä.

FooBat [07.03.2006 20:46:22]

#

Käsittääkseni perusjavassa ei ole mukana valmiita työkaluja värien vähentämiseen, joten joudut käyttämään jotain valmiita kuvan muokkauksiin tarkoitettuja kirjastoja kuten
http://rsb.info.nih.gov/ij/ tai
http://java.sun.com/products/jimi/.

Toinen vaihtoehto on itse tutustua tähän liittyviin algoritmeihin ja yritttää toteuttaa esim. Median Cut, joka yleensä tuottaa melko hyvää jälkeä.
http://www.olympusmicro.com/primer/java/digitalimaging/processing/colorreduction/

Sanottakoon, että en ole itse käyttänyt mitään ylläolevia paketteja, joten en tiedä kuinka hyvin ne toimivat.


Toisaalta, miksi haluat pienentää jpeg kuvien värimäärää? Valokuvasta tulee usein todella ruman näköinen pienemmällä värimäärällä ellei käytä jotain error diffusion algoritmia, mikä lopulta käytännössä tarkoittaa, että jpeg-pakkaus toimii huonommin ja kuva viekin enemmän tilaa kuin alkuperäinen. Oikea tapa pienentää jpeg-kuvien kokoa on kasvattaa pakkauskerrointa, joka suuremmilla pakkausasteilla käytännössa hiukan sumentaan ja neliöittää kuvaa. Esim.
http://javaalmanac.com/egs/javax.imageio/JpegWrite.html

Jos taas sinulla on itse piirrettyjä kuvia, on jpeg täysin väärä formaatti. Käytä jpeg:in sijaan png-formaattia, joka pakkaa yksinkertaiset kuvat huomattavasti paremmin. ImageIO tukee png kuvien tallentamista suoraan, annat vain tyypiksi png:n.

feenix [08.03.2006 15:30:21]

#

JPEG-kuva ei voi olla kuin harmaasävy tai RGB, palettiversiota ei ole olemassakaan. PNG on sitten eri asia ja sitä pitää tosiaan käyttää paletoiduissa ja/tai piirretyissä kuvissa.

Paulus M [10.03.2006 15:51:32]

#

Ok, aattelin että en teekkää sitte sitä palettia, ku totta puhutte, ei se kannata. Laskeskelinpa tässä juuri vähän hyötyä; jos haluan vaikka 16(r)*16(g)*16(b) väriä normaalin 256*256*256 sijaan, niin en saa piennennettyä kuvan kokoa kuin vain 50%:lla (4 +4 +4) bytes /(8+8+8)bytes) = o,5. Värien määrä tippuu sen sen sijaan 2:den sijasta montatuhatta kertaa piennemmäksi: 16^3/256^3 = 0,000244.... Eli käytössäni olisi enää noin 3 väriä kutakin kymmentätuhatta väriä kohti, jota voisin käyttää ilman kuvan pienentämistä - ei kovin hyvä hyötysuhde....heh.

Mutta tässä samalla; voisitteko valaista minua vähän ihan perusasioissa:

Olen koittanut tällaista lausetta, joka toimii jossakin paikoissa esim. Graphics funktion sisällä, mutta ei joka paikassa.

Image apukuva = createImage(100, 100);

kääntäjä valittaa:

testeja/Kuvakaantaja.java [53:1] cannot resolve symbol
symbol  : method createImage (int,int)
location: class Kuvakaantaja
Image apukuva = createImage(101, 101);
______________^

Eli tarkoituksenani olisi piirtää tässä apuluokkassasin(Kuvakaantaja) itseluomaani Image olioon pari viivaa, jotka voisin piirtää myöhemmin toisen luokan paint methodilla drawImage näytölle. Miten onnistuisi?

FooBat [12.03.2006 05:38:40]

#

Itse olen aina käyttänyt BufferedImage luokkaa tuohon tarkoitukseen. createImage on Component luokan metodi, joten se ei toimi muualla kuin siitä perityissä luokissa.

Image apukuva = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);

Paulus M [12.03.2006 10:58:52]

#

joo, tää toimi. Kiitokset!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta