Каков максимальный размер изображения, который можно создать с помощью Java 2D?Как создать изображение большего размера в Java2D
Я использую 64-разрядную ОС Windows 7 Pro и версию JDK 1.6.0_33, 64-разрядную версию. Я могу создать BufferedImage размером до 5 МБ. Кроме того, я получаю OutOfMemoryError.
Просьба указать, как создать изображение большего размера с использованием Java 2D или JAI.
Вот моя попытка.
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class CreateBiggerImage
{
private String fileName = "images/107.gif";
private String outputFileName = "images/107-Output.gif";
public CreateBiggerImage()
{
try
{
BufferedImage image = readImage(fileName);
ImageIO.write(createImage(image, 9050, 9050), "GIF", new File(System.getProperty("user.dir"), outputFileName));
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
private BufferedImage readImage(String fileName) throws Exception
{
BufferedImage image = ImageIO.read(new File(System.getProperty("user.dir"), fileName));
return image;
}
private BufferedImage createImage(BufferedImage image, int outputWidth, int outputHeight) throws Exception
{
int actualImageWidth = image.getWidth();
int actualImageHeight = image.getHeight();
BufferedImage imageOutput = new BufferedImage(outputWidth, outputHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = imageOutput.createGraphics();
for (int width = 0; width < outputWidth; width += actualImageWidth)
{
for (int height = 0; height < outputHeight; height += actualImageHeight)
{
g2d.drawImage(image, width, height, null);
}
}
g2d.dispose();
return imageOutput;
}
public static void main(String[] args)
{
new CreateBiggerImage();
}
}
Сколько памяти вы даете своей Java-программе? – Kayaman
Привет, Kayaman, я попробовал следующее: java -jar MaxMemoryTest.jar, а также java -jar -Xms512m -Xmx1024m MaxMemoryTest.jar – Sivagururaja
Ваше изображение размером 9050 x 9050 использует 4 байта на пиксель (для TYPE_INT_RGB). Это приводит к 327610000 байтам или> 312 МБ в памяти. Вы уверены в ограничении 5 МБ? Это должно быть выполнимо с -Xmx1024m, если, конечно, входное изображение не огромно. Также помните, что JVM нужен блок * смежного свободного пространства * для создания массива int для вашего изображения в куче. Таким образом, наличие 1024 МБ кучи не является гарантией (но оно должно * работать). – haraldK