(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc
Heb je al naar de Image IO packages gekeken? Ik weet niet of ze doen wat je wil, maar dat is het eerste wat ik even tegenkom in de 1.4.2 API.
'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'
Ja, daar heb ik al naar zitten kijken.
maar als je bv. het volgende doet:
Dan krijg je een:
java.lang.IllegalArgumentException: Array size > Integer.MAX_VALUE
Wat natuurlijk niet gek is.
Maar hoe zou ik hem wel kunnen openen.
Iemand?
maar als je bv. het volgende doet:
PHP:
1
2
3
| File f = new File("c:\\Plaatjes\\scan1.jpg"); BufferedImage hoi = ImageIO.read(f); |
Dan krijg je een:
java.lang.IllegalArgumentException: Array size > Integer.MAX_VALUE
Wat natuurlijk niet gek is.
Maar hoe zou ik hem wel kunnen openen.
Iemand?
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc
Welke afmetingen heeft zo'n jpegje van 100 MB eigenlijk? Is zoiets meer dan 2,1 miljard pixels breed/hoog?
Als je met zulke hoeveelheden data bezig bent is het ook raadzaam om de VM wat meer geheugen te geven, dus je programma/applet opstarten met java -Xmx256M oid. Al duidt Array size > Integer.MAX_VALUE nou niet direct op een geheugenprobleem natuurlijk.
Ook zou ik eerder geneigd zijn om een applicatie te maken in plaats van een applet, al is dat misschien een verkeerde veronderstelling.
Nog even wat gezocht: voor hele grote plaatjes zou je de tiling faciliteiten van Java Advanced Imaging kunnen gebruiken. Met tiles kun je een (groot) plaatje in stukjes inladen.
JadeDisplay is een 'high-performance image display component for serious imaging applications using JAI (Java Advanced Imaging)' oftwel een behoorlijke 'wrapper' om JAI heen. Het is alleen wel lastig te verkrijgen zie ik nu pas weer, je moet er vanuit de VS een fax voor versturen bijvoorbeeld.
Als je met zulke hoeveelheden data bezig bent is het ook raadzaam om de VM wat meer geheugen te geven, dus je programma/applet opstarten met java -Xmx256M oid. Al duidt Array size > Integer.MAX_VALUE nou niet direct op een geheugenprobleem natuurlijk.
Ook zou ik eerder geneigd zijn om een applicatie te maken in plaats van een applet, al is dat misschien een verkeerde veronderstelling.
Nog even wat gezocht: voor hele grote plaatjes zou je de tiling faciliteiten van Java Advanced Imaging kunnen gebruiken. Met tiles kun je een (groot) plaatje in stukjes inladen.
JadeDisplay is een 'high-performance image display component for serious imaging applications using JAI (Java Advanced Imaging)' oftwel een behoorlijke 'wrapper' om JAI heen. Het is alleen wel lastig te verkrijgen zie ik nu pas weer, je moet er vanuit de VS een fax voor versturen bijvoorbeeld.
How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.
In een jpeg wordt alle data gebruikt voor het comprimeren. Je hebt de hele jpeg nodig voordat een stukje eruit kan halen.
Kan je alleen een jpeg van >100 MB krijgen? Als je het plaatje anders kan krijgen, dan kan je het bijvoorbeeld op deze twee manieren oplossen:
1) Plaatje is in bestandsformaat zonder compressie (bv bmp, tga, raw). Je hoeft alleen het deel dat je nodig hebt uit te lezen. De nadelen hiervan zijn dat het bestand heel erg groot is en dat je waarschijnlijk zelf code zal moeten schijven die het juiste deel uit het bestand haalt.
2) Plaatje is gesplitst in kleine stukjes. Stukjes plak je dynamisch aan elkaar. Dit gaat snel, kost weinig geheugen en is relatief makkelijk te implementeren. Het enige nadeel is dat je bij een lossy compressie zoals jpeg soms de randen kan zien. Het beste kan er een lossless compressie gebruikt worden voor de plaatjes (bv gif, png, tiff).
In de praktijk wordt vrijwel altijd die 2e methode gebruikt. Dit is de "tiling" waar zwippie het ook al over had.
Kan je alleen een jpeg van >100 MB krijgen? Als je het plaatje anders kan krijgen, dan kan je het bijvoorbeeld op deze twee manieren oplossen:
1) Plaatje is in bestandsformaat zonder compressie (bv bmp, tga, raw). Je hoeft alleen het deel dat je nodig hebt uit te lezen. De nadelen hiervan zijn dat het bestand heel erg groot is en dat je waarschijnlijk zelf code zal moeten schijven die het juiste deel uit het bestand haalt.
2) Plaatje is gesplitst in kleine stukjes. Stukjes plak je dynamisch aan elkaar. Dit gaat snel, kost weinig geheugen en is relatief makkelijk te implementeren. Het enige nadeel is dat je bij een lossy compressie zoals jpeg soms de randen kan zien. Het beste kan er een lossless compressie gebruikt worden voor de plaatjes (bv gif, png, tiff).
In de praktijk wordt vrijwel altijd die 2e methode gebruikt. Dit is de "tiling" waar zwippie het ook al over had.