在跟踪我的应用程序中的严重内存问题时,我查看了几个来自我的应用程序的堆转储文件,并且大部分时间我都有一个我不知道的巨大位图。
它占用9.4MB,或9,830,400字节,实际上是一个1280x1920像素,每像素4个字节的图像。
我在Eclipse MAT中检查,它确实是一个byte[9830400],它只有一个传入引用,即android.graphics.Bitmap。
我想将其转储到文件中并尝试查看它。我不能理解它是从哪里来的。我所有可绘制内容中最大的图像是一个640x960 png,仅占用不到3MB。
我尝试使用Eclipse"将值复制到文件",但我认为它只是将缓冲区打印到文件中,我不知道任何可以读取字节流并将其显示为每像素4字节图像的图像软件。
有什么建议吗?
这是我尝试过的:将字节数组转储到文件中,在/sdcard/img中推送它,然后加载这样的活动:
我看不到任何东西。
你知道图片是如何编码的吗?假设它被存储在
它占用9.4MB,或9,830,400字节,实际上是一个1280x1920像素,每像素4个字节的图像。
我在Eclipse MAT中检查,它确实是一个byte[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");
}
}
我看不到任何东西。
你知道图片是如何编码的吗?假设它被存储在
byte[] buffer
中。 buffer[0]
代表红色,buffer[1]
代表绿色,以此类推。