Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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 将大图像保存到PNG_Java_Android_Bitmap_Out Of Memory - Fatal编程技术网

Java 将大图像保存到PNG

Java 将大图像保存到PNG,java,android,bitmap,out-of-memory,Java,Android,Bitmap,Out Of Memory,我刚刚遇到一个棘手的问题 以下是我的故事: 我的设备是三星Galaxy Note,通常情况下,它以3264*2448像素的分辨率拍摄照片。当我试图查找详细信息时,我喜欢精美的图片,但在这里我讨厌它,因为它在Android中处理起来太庞大了。我可以阅读和显示这样高分辨率的图像,我需要在上面画线,然后我需要将图片和线保存到png。 我最头疼的是,当我试图创建一个像这样的可变位图时,我的Android总是给我一个异常的 Bitmap bmp = Bitmap.createBitmap(3264

我刚刚遇到一个棘手的问题

以下是我的故事:

我的设备是三星Galaxy Note,通常情况下,它以3264*2448像素的分辨率拍摄照片。当我试图查找详细信息时,我喜欢精美的图片,但在这里我讨厌它,因为它在Android中处理起来太庞大了。我可以阅读和显示这样高分辨率的图像,我需要在上面画线,然后我需要将图片和线保存到png。 我最头疼的是,当我试图创建一个像这样的可变位图时,我的Android总是给我一个异常的

    Bitmap bmp = Bitmap.createBitmap(3264, 2448, Config.RGB_565);
    Canvas cv = new Canvas(bmp);
    //draw a line and save and restore canvas
    // I found an alternative solution yet proven to be uncorrect:
    myImageView.setDrawingCacheEnabled(true);
    myImageView.buildDrawingCache(true);
    Bitmap bmp = myImageView.getDrawingCache();
    //save bmp to png

bmp.width * bmp.height * 4 > getScaledMaximumDrawingCacheSize()
异常跳出。我测试了
myImageView.measure(…)
myImageView.layout(…)
,对我不起作用。 (当我使用较小的图像测试相同的代码时,情况很好)


有专家知道如何解决这个问题或向我提出解决方案吗?谢谢

可能不是明确的解决方案,但您是否尝试增加堆大小

对于Android 2.2或更低版本:

dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(sizeInBytes);
对于Android:


您是否计算了保存该大小和质量的位图所需的内存。无论您开发的平台是什么,它都是巨大的,但是如果您没有仔细管理位图对象,您会发现在受限内存设备上更麻烦。您可能想看一看,您可能想尝试先将大位图分为几块,然后仔细地绘制并对齐它们上的线条。然后你需要把小部分放回完整的大位图。听起来是个好主意,但是它是如何工作的呢?我的意思是,你有任何源代码或其他详细信息吗?我很难做到这一点…只需调整图像大小,以适应当前的显示。我用我的surfaceView从画廊里画了一张图片。
android:largeHeap="true"