0

我正在使用 JNI 获取以下格式的原始图像数据:

图像数据以线性数组中每个像素的 DATA32(32 位)格式返回,从图像的左上角到右下角,每行从左到右排列。每个像素都有高 8 位作为 alpha 通道,低 8 位是蓝色通道 - 所以一个像素的位是 ARGB(从最高有效到最低有效,每个通道 8 位)。您必须在某个时候将数据放回原处。

DATA32 格式本质上是 C 中的无符号整数。

所以我获得了一个 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 文档,这应该可以工作,因为 BufferedImage.TYPE_INT_ARGB 是:

表示包含 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

4

1 回答 1

0

我是个白痴。

这只是一个错误。

我忘了包括我如何计算上面的 x,y 。

基本上我在使用

 int x = i%w;
 int y = i/h;

在 for 循环中,这是错误的。应该

 int x = i%w;
 int y = i/w;

不敢相信我犯了这个愚蠢的错误。

于 2009-05-19T01:37:24.277 回答