嗨,我想提取整数颜色值为每个像素出一个字节数组,这类似于位图。
有时,尤其是在旧设备上,我会遇到outofmemory异常。我假设这个异常是由于位图内部存储的方式引起的,因为在较新的设备(api 26及以上)上,位图存储在本机堆中,而在较旧的设备上,像素数据存储在dalvik堆中。
我使用此代码提取像素颜色值:
//here I am reading in my bitmap from the disk
byte[] bytes = byteArrayOutputStream.toByteArray();
//convert byte array to Bitmap
Bitmap inputBitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
//make it mutable
inputBitmap = inputBitmap.copy(Bitmap.Config.ARGB_8888, true);
//create color pixel array (1 int value resembles the color value of the pixel)
int[] pixels = new int[width * height];
//get the color values from the bitmap
inputBitmap.getPixels(pixels, 0, width, 0, 0, width, height);
//I only need the green color values so to store it I need another byte array
byte [] buffer = new byte[width*height];
//store the green value in the new byte buffer array where one byte resembles the green proportion of the origin color pixel
for(int i = 0; i < pixels.length; i++) {
buffer[i] = (byte) ((Color.green(pixels[i]))-128);
}
此代码在较新的设备上运行得非常好,但在内存有限的较旧设备上,它将引发oom异常。
有没有什么有效的方法可以只从起始字节数组中提取绿色值,而不创建占用内存的位图示例?
当然,上面的代码是异步运行的,并且对很多位图使用多核。因此,我需要一种有效的方法从字节数组中提取绿色值,并将颜色值存储在字节数组中:
private byte[] getGreenColorValues(byte[] bitmapFromDisk){
...
return greenColorValuesArray;
}
暂无答案!
目前还没有任何答案,快来回答吧!