本文介绍了bitmap.copy()抛出内存不足的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用通用图像装载
库加载图像,但是当我打电话复制()
上在某些情况下,我得到的OutOfMemoryError
加载的位图文件。
这里是我的code:
ImageLoader.getInstance()的LoadImage(路径,新ImageLoadingListener(){ @覆盖
公共无效onLoadingStarted(字符串为arg0,ARG1查看){
// TODO自动生成方法存根 } @覆盖
公共无效onLoadingFailed(字符串为arg0,ARG1查看,FailReason ARG2){
// TODO自动生成方法存根 } @覆盖
公共无效onLoadingComplete(字符串为arg0,ARG1查看,位图ARG2){
BM = ARG2;
} @覆盖
公共无效onLoadingCancelled(字符串为arg0,ARG1查看){
// TODO自动生成方法存根 }
});
位图BM2 = bm.copy(Bitmap.Config.ARGB_8888,真); //其中的崩溃发生
我还需要第二次位图
不是是可变的,所以我可以借鉴的。
解决方案
首先尝试找到一点时间来阅读好官方文档关于位图:的
它会给你理解为什么当 java.lang.OutofMemoryError
发生。而如何避免它。
那你的问题:看到这篇文章:
//this is the file going to use temporally to save the bytes.
File file = new File("/mnt/sdcard/sample/temp.txt");
file.getParentFile().mkdirs();
//Open an RandomAccessFile
/*Make sure you have added uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
into AndroidManifest.xml file*/
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
// get the width and height of the source bitmap.
int width = bitmap.getWidth();
int height = bitmap.getHeight();
//Copy the byte to the file
//Assume source bitmap loaded using options.inPreferredConfig = Config.ARGB_8888;
FileChannel channel = randomAccessFile.getChannel();
MappedByteBuffer map = channel.map(MapMode.READ_WRITE, 0, width*height*4);
bitmap.copyPixelsToBuffer(map);
//recycle the source bitmap, this will be no longer used.
bitmap.recycle();
//Create a new bitmap to load the bitmap again.
bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
map.position(0);
//load it back from temporary
bitmap.copyPixelsFromBuffer(map);
//close the temporary file and channel , then delete that also
channel.close();
randomAccessFile.close();
And here is sample code.
这篇关于bitmap.copy()抛出内存不足的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!