java - Android 位图 8 位像素而不是 32 位像素?

标签 java android bitmap

我有一些原始图片文件(灰度传感器数据),其中每个字节都是一个像素灰度值。所以所有像素都是 8 位值。在我的 native 代码中,我处理该(原始)字节(图像处理),然后,我使用 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 还很陌生。

最佳答案

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

为了以防万一,ARGB_8888 意味着 1 个像素的每个 channel (alpha、红色、绿色、蓝色)1 个字节,很高兴等于 32 位。

关于java - Android 位图 8 位像素而不是 32 位像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16697817/

相关文章:

java - 尝试创建对象的多个实例并打印它们的信息

java - 将对象移动到列表末尾的优雅方式

android - 通过Camera API 2捕获图片并保存为Bitmap

java - 无法获取代码进行编译: ')' expected

java - Android 中可中断的 ScheduledExecutorService

XXHDPI 和 XXXHDPI 的 Android 官方图标

android - 如何以编程方式将 VectorDrawable 设置为 ImageView 的图像

java - 如何在android中将图像黑白图像转换为0-1字节数组

android - NV21 ByteArray 到 array2d<rgb_pixel>

java - 获取 DateTime dayOfWeek/dayOfMonth 作为字符串