我有一个应用程序,目前通过camera2以jpeg格式拍摄黑白176 x 144图像并将其保存到存储中。除此之外,我还需要一个int / float数组,其中每个点对应于jpeg图像中一个像素的强度。由于图像是黑白的,这个数字数组应该足以通过简单地将其绘制为沿适当尺寸的热图来重建我的图像,因为在黑白空间中每个像素只需要一个值。
我发现这样做的方法是将jpeg转换为字节数组,将位图转换为sRGB值的int数组,转换为R值的int数组。这确实有效(下面的代码),但似乎是一种非常冗长且低效的方法。有人能够建议更直接的方式吗?比如直接从原始jpeg Image获取像素值?
// Convert photo (176 x 144) to byte array (1x25344)
Image mImage = someImage // jpeg capture from camera
ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
//Save photo as jpeg
savePhoto(bytes);
//Save pixel values by converting to Bitmap first
Bitmap image = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
int x = image.getWidth();
int y = image.getHeight();
int[] intArray = new int[x * y];
image.getPixels(intArray, 0, x, 0, 0, x, y);
for(int i = 0; i < intArray.length; i++) {
intArray[i] = Color.red(intArray[i]); //Any colour will do
}
//Save pixel values
saveIntArray(intArray);