在我的应用程序中跟踪严重内存问题的过程中,我查看了我的应用程序中的几个堆转储,并且大多数时候我有一个我不知道的巨大位图.
它需要9.4MB或9,830,400字节,或者实际上是每像素4字节的1280x1920图像.
我在Eclipse MAT中检查过它确实是一个字节[9830400],它有一个传入引用,它是一个android.graphics.Bitmap.
我想把它转储到一个文件,并尝试看到它.我无法理解它的来源.我所有绘图中最大的形象是640x960 png,不到3MB.
我试图使用Eclipse"将值复制到文件",但我认为它只是将缓冲区打印到文件中,我不知道任何可以读取字节流并将其显示为每像素4个字节的图像软件图片.
任何的想法?
这是我尝试过的:将字节数组转储到文件中,将其推送到/ sdcard/img,然后加载如下活动:
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
final File inputFile = new File("/sdcard/img");
final FileInputStream isr = new FileInputStream(inputFile);
final Bitmap bmp = BitmapFactory.decodeStream(isr);
ImageView iv = new ImageView(this);
iv.setImageBitmap(bmp);
setContentView(iv);
Log.d("ImageTest", "Image was inflated");
} catch (final FileNotFoundException e) {
Log.d("ImageTest", "Image was not inflated");
}
}
Run Code Online (Sandbox Code Playgroud)
我没有看到任何东西.
你知道如何编码图像吗?说它存储在byte[] buffer.buffer[0]是红色,buffer[1]是绿色等?