我有一些原始图片文件(灰度感应器数据),其中每个字节都是一个像素灰度值。所以所有的像素都是8位的值。在我的本地代码中,我处理(原始)字节(图像处理),之后,我使用DirectByteBuffer将字节数组传递给Java-VM (Java-NIO)。
在我的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()方法需要一个整型数组,其中每个整型值必须是一个像素值。因此,我将DirectByteBuffer看作一个IntBuffer (asIntBuffer()-method)。但这并不是我真正想要的,因为现在4个像素(=4个字节)被放在一起构成一个整数像素值。你明白我的意思吗?没有办法使用字节数组来设置位图的像素。您只能传递整数数组。因此,我将不得不修改我的字节数组(当然,将它增加4倍于原始大小),以使我的8位值采用32位整数格式。
你知道如何在安卓ImageView中显示图像数据,而不需要修改字节数组吗?也许有一种方法不使用位图或其他东西..?我是android btw的新手。
发布于 2013-05-23 02:28:20
看看这里:Render a byte[] as Bitmap in Android,并根据你的问题调整它。
以防万一,ARGB_8888表示每个通道(阿尔法、红色、绿色、蓝色)1个像素的1个字节,并且令人欣慰地等于32位。
https://stackoverflow.com/questions/16697817
复制相似问题