Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理不断更新的大型图像_Java_Swing_Out Of Memory_Bufferedimage - Fatal编程技术网

Java 如何处理不断更新的大型图像

Java 如何处理不断更新的大型图像,java,swing,out-of-memory,bufferedimage,Java,Swing,Out Of Memory,Bufferedimage,我正在开发一个绘画应用程序,用户可以创建任意大小的图像。我正在使用BuffereImage进行绘制,然后将该图像绘制到JPanel上。但是,当我尝试制作一个图像,例如12000 x 12000时,我得到一个内存不足错误。我认为我处理这个问题的方法是错误的,因为其他应用程序,如Photoshop和Paint.net已经成功地做到了这一点。关于在Java中使用大型图像的逻辑应该是什么的提示 编辑: 这是我在程序中允许的最大大小。但是,如果我运行这个程序,由于内存不足,仍然会出现错误。所以我猜不可能在

我正在开发一个绘画应用程序,用户可以创建任意大小的图像。我正在使用BuffereImage进行绘制,然后将该图像绘制到JPanel上。但是,当我尝试制作一个图像,例如12000 x 12000时,我得到一个内存不足错误。我认为我处理这个问题的方法是错误的,因为其他应用程序,如Photoshop和Paint.net已经成功地做到了这一点。关于在Java中使用大型图像的逻辑应该是什么的提示

编辑: 这是我在程序中允许的最大大小。但是,如果我运行这个程序,由于内存不足,仍然会出现错误。所以我猜不可能在一张图片中存储所有的内容

public class BigImage {

    public static void main(String[] args) {
        BufferedImage image = new BufferedImage(400 * 256, 400 * 256, BufferedImage.TYPE_INT_RGB);
    }

}

BuffereImage基本上是一个1D数组,在Java中,您不能分配大于int的值,因此您可以拥有的最大值是:

int[] array = new int[Integer.MAX_VALUE] ;

如果你确实需要更大的东西,你必须自己用这个类来做

BuffereImage基本上是一个1D数组,在Java中,您不能分配大于int的值,因此您可以拥有的最大值是:

int[] array = new int[Integer.MAX_VALUE] ;

如果你确实需要更大的东西,你必须自己用这个类来做

查看一下可能会让您更好地了解什么是
OutOfMemoryError
实际上是内存管理问题。您面临的问题是将所有数据都保存在内存中。作为一种天真的方法,您可以做的是只在内存中加载您正在编辑的区域!路易斯福。我试着这样做,但我无法使滚动平滑,所以我把它拿了出来。我将用这种方法研究平滑滚动。MadProgrammer,我读了这篇文章,我想我理解Java的垃圾收集是如何工作的,但是如果我创建了一个新项目,其中创建的唯一对象是BuffereImage,它仍然会抛出一个错误。我将编辑我的代码,给出一个示例
新的BuffereImage(400*256,400*256..
嗯..那么你想支持1000亿像素的图像吗?祝你好运。顺便说一句,一个朋友正在使用Photoshop和这台机器(当然是笔记本电脑)为我制作一张6000 x 6000像素的图像(3600万像素)我发现很难相信普通台式电脑上的Photoshop可以处理千兆像素的图像。也许看看它可以让你更好地了解
OutOfMemoryError
,实际上这是一个内存管理问题。你面临的问题是,你要保留所有的数据ATA在内存中。作为一种天真的方法,你能做的就是只在内存中加载你正在编辑的区域!LouisF。我尝试过这样做,但我无法使滚动平滑,所以我把它拿了出来。我将用这种方法研究平滑滚动。MadProgrammer,我读过这篇文章,我想我理解Java的垃圾收集是如何工作的,but如果我创建一个新项目,创建的唯一对象是BuffereImage,它仍然会抛出一个错误。我将编辑我的代码,给出一个示例
new BuffereImage(400*256,400*256..
Uh-huh..那么你想支持10G像素的图像吗?祝你好运。顺便说一句,一个朋友正在制作一个6000 x 6000像素的图像(3600万像素)对我来说,使用Photoshop的机器(当然是笔记本电脑)就快死了。我发现很难相信普通台式电脑上的Photoshop能处理千兆像素大小的图像。