Android Bitmap 8位像素而不是32位像素?

时间:2013-05-22 17:12:58

标签: java android bitmap

我有一些原始图片文件(灰度感应数据),其中每个字节是一个像素灰度值。所以所有像素都是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 btw很新。

1 个答案:

答案 0 :(得分:0)

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

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