создание огромного BufferedImage - PullRequest
8 голосов
/ 01 февраля 2012

Я не могу создать огромный BufferedImage (нехватка памяти не проблема).У кого-нибудь есть идеи?

1.новый BufferedImage (10000, 1000000, BufferedImage.TYPE_3BYTE_BGR);

Exception in thread "main" java.lang.NegativeArraySizeException
    at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:42)
    at java.awt.image.Raster.createInterleavedRaster(Raster.java:253)
    at java.awt.image.BufferedImage.<init>(BufferedImage.java:368)

2.новый BufferedImage (10000, 1000000, BufferedImage.TYPE_INT_RGB);

Exception in thread "main" java.lang.IllegalArgumentException: Dimensions (width=10000 height=1000000) are too large    
at java.awt.image.SampleModel.<init>(SampleModel.java:112)
    at java.awt.image.SinglePixelPackedSampleModel.<init>(SinglePixelPackedSampleModel.java:124)
    at java.awt.image.Raster.createPackedRaster(Raster.java:770)
    at java.awt.image.Raster.createPackedRaster(Raster.java:466)
    at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
    at java.awt.image.BufferedImage.<init>(BufferedImage.java:315)

1 Ответ

15 голосов
/ 01 февраля 2012

Я считаю, что это ограничение класса Raster.Width * Height должно быть меньше Integer.MAX_VALUE

http://docs.oracle.com/javase/7/docs/api/java/awt/image/Raster.html

В качестве обходного пути я бы, вероятно, разделил свой BufferedImage на секции, где ширина и высота меньше квадратного корняInteger.MAX_VALUE, так что 46,340x46,340 макс.

ОБНОВЛЕНИЕ: похоже, библиотека PNGJ в http://code.google.com/p/pngj/ была создана для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...