我有一些原始图片文件(灰度传感器数据),每个字节都是一个像素的灰度值。因此,所有像素都是8位值。在我的本地代码中,我处理这些(原始)字节(图像处理),然后将字节数组传递给Java虚拟机,并使用DirectByteBuffer(Java-NIO)。
在我的Java代码中,我想在ImageView中绘制图像数据。因此,我使用位图将我的图像数据放入其中。以下是我在Java端执行的操作:
这是我的问题。目前一切都很好,但是:
在我的Java代码中,我想在ImageView中绘制图像数据。因此,我使用位图将我的图像数据放入其中。以下是我在Java端执行的操作:
// getLeftImageData() is the native function that returns the
// DirectByteBuffer with the imagedata to be drawn. Each Byte
// is one pixel value.
IntBuffer leftImageData = getLeftImageData().asIntBuffer();
int[] arrayL = new int[leftImageData.remaining()];
leftImageData.get(arrayL);
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmpL = Bitmap.createBitmap(1920/4, 1080/4, conf);
bmpL.setPixels(arrayL, 0, 1920, 0, 0, 1920/4, 1080/4);
ImageView imageL = (ImageView)findViewById(R.id.imageLeft);
imageL.setImageBitmap(bmpL);
这是我的问题。目前一切都很好,但是:
setPixels()
方法需要一个int数组,其中每个int值必须是一个像素值。因此,我将DirectByteBuffer视为IntBuffer(使用asIntBuffer()方法)。但这并不是我想要的,因为现在4个像素(= 4个字节)被合并为一个整数像素值。你明白我的意思吗?没有办法使用字节数组设置位图的像素。你只能传递一个整数数组。所以我必须修改我的字节数组(当然还要将其增加到原始大小的4倍),才能以32位整数格式拥有我的8位值。
你有什么想法,如何在Android ImageView中显示图像数据而无需修改字节数组吗?也许有一种方法可以不使用位图等东西...? 我对Android非常陌生。
每像素1字节
转换为每像素4字节
的数据吗?你可以在每个字节的右侧填充三个0字节。 - S.D.setPixels()
是在Bitmap
中本地实现的,因此没有覆盖它以使用1bpp
数组的机会。唯一的解决方案是创建另一个数组,正如其他人所指出的那样。 - S.D.