"Instance třídy java.awt.image.BufferedImage mohou reprezentovat obrázky libovolných rozměrů " neni uplne spravne, neb maximalni velikost je Integer.MAX_VALUE x Integer.MAX_VALUE (prekvapive:) ) a v geografickych ci medicinskych aplikacich na to clovek narazi celkem casto.
je to skoda, neb idealni nekonecny obrazek bych si predstavoval jako max(swapovatelne)ram/bituNaPixel.
Ne ze by to neslo nepohodlne obejit, ale rypu spis proto jestli nekdo nema srovnani jestli nejaky jazyk/knihovna tohle neumi lepe (ne rucne :)
Inac diky za pekny clanek. Pekne osvezeni znalosti:)
To mě překvapuje. Integer.MAX_VALUE je 2147483647. Kdyby jeden pixel byl jeden bit, tak i jeden pixel široký / vysoký obrázek je 268MB. Pokud budu uvažovat obrázek, kde poměr stran je lepší než 1:1000, tak dosažitelný počet pixelů je 4611686 miliard pixelů. Při jednom bitu na pixel je to 576TB (524 TiB) na obrázek. To asi hned tak neodswapujete. Obrázek tvaru nudle s poměrem stran 1:1000000 už by se na běžně dostupný disk dostal (byť bych nerad čekal na jeho odswapování), ale na co by kdo takovou nudli vlastně použil? Medicína i geografie je hlavně o 2D, případně 3D.
takze oprava - java to ma sprznene jeste jinak:
Manualni check v SampleModelu:
long size = (long)width * height;
.....
if (size >= Integer.MAX_VALUE) {
throw new IllegalArgumentException("Dimensions (width="+w+
" height="+h+") are too large");
}
A dalsi "kontrola" je v DataBufferInt :
data = new int[size]; //cili velikost celeho pole ve kterem je obrazek ulozen je Integer.MAX_VALUE-1 ....
Cili maximalni velikost obrazku (hodne zjednodusene) odmocnina z Integer.MAX_VALUE coz uz je dost realne omezeni.
Jeste bych prisahal ze mi to pri nejakych dalsich operacich chcipalo na omezni konstantou 65,535 jako maximalni velikost jedne strany. Ale nevybvuju si kde, a na rychlo se mi to nepodarilo zreprodukovat.
Jojo, musim se podivat na zdrojaky OpenJDK, ale ty kontroly jsou IMHO nastaveny spatne, minimalne pro binarni obrazky. Kontrola pro meze pole - ok, ale proc kontrolujeme takhle blbe dimenzi bitmapy, to me neni moc jasne.
Jinak problemy jsi mohl mit urcite pri ukladani obrazku do souboru, typicky pro JPEG a GIF (tam by to slo obejit, ale maloktery SW to zvladne)