我正在使用JNI获取以下格式的原始图像数据:
图像数据以每像素32(32位)的数据格式返回,该数据以线性数组的形式排列,从图像的左上角到右下角,从左到右每行排列一次。每个像素的上8位是alpha通道,下8位是蓝色通道,因此像素的位是argb(从最高到最低有效,每个通道8位)。您必须在某个时刻将数据放回原处。
data32格式本质上是c中的无符号int。
所以我得到了一个int[]数组,然后尝试通过
int w = 1920;
int h = 1200;
BufferedImage b = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
int[] f = (new Capture()).capture();
for(int i = 0; i < f.length; i++){;
b.setRGB(x, y, f[i]);
}
f是包含像素数据的数组。
根据Java文档,这应该工作,因为BuffeReDiga.Type
表示一个图像,其中8位rgba颜色组件打包为整数像素。图像具有带alpha的DirectColorModel。此图像中的颜色数据被认为不与alpha预乘。当将此类型用作BufferedImage构造函数的ImageType参数时,创建的图像与JDK1.1和早期版本中创建的图像一致。
除非使用8位rgba,否则它们意味着所有加在一起的组件都编码为8位?但这是不可能的。
此代码确实有效,但生成的图像与它应该生成的图像完全不同。这里有成吨的文物。有人能在这里看到明显的错误吗?
注:我获得的像素数据
imlib_context_set_image(im);
data = imlib_image_get_data();
在我的C代码中,使用库imlib2和API
http://docs.enlightenment.org/api/imlib2/html/imlib2_8c.html#17817446139a645cc017e9f79124e5a2