3

我有一些原始图片文件(灰度传感器数据),其中每个字节都是一个像素灰度值。所以所有像素都是 8 位值。在我的本机代码中,我处理那个(原始)字节(图像处理),然后,我使用 DirectByteBuffer (Java-NIO) 将字节数组传递给 Java-VM。

在我的 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 倍的原始大小),才能使我的 8 位值采用 32 位整数格式。

您有什么想法,我如何在 android ImageView 中显示图像数据而无需修改字节数组?也许有一种不使用位图或其他东西的方法..?顺便说一句,我对android很陌生。

4

1 回答 1

0

看看这里:Render a byte[] as Bitmap in Android并根据您的问题进行调整。

为了以防万一,ARGB_8888 表示每个通道 1 个字节(alpha、红色、绿色、蓝色)1 个像素,并且很高兴等于 32 位。

于 2013-05-22T18:28:20.107 回答