gpt4 book ai didi

java - 如何修改 NDK 中的 Android 位图以便我可以在 Java 端使用它?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:20 25 4
gpt4 key购买 nike

我通过 JNI 调用一个 C++ 函数并传递一个 RGBA_8888 位图,锁定它,更改值,解锁它,返回,然后使用此 C++ 代码在 Java 中显示它:

AndroidBitmap_getInfo(env, map, &info) < 0);
AndroidBitmap_lockPixels(env, map, (void**)&pixel);

for(i=info.width*info.height-1;i>=0;i--)
{ pixel[i] = 0xf1f1f1f1;
}

AndroidBitmap_unlockPixels(env, map);

我遇到的问题是位图看起来不像我预期的那样,并且当我在 Java 中检查它们时像素值(使用 getPixel 验证)与我在 C++ 中设置的值不同。当我将位图值设置为 0xffffffff 时,我在 Java 中得到了正确的值,但对于许多其他人我没有。例如 0xf1f1f1f1 变成 0xF1FFFFFF。

我需要做什么才能让它发挥作用?

PS: 我使用的是 Android 2.3.4

最佳答案

看来问题是因为预乘 alpha。

进一步测试显示 r、g、b 值按 alpha 缩放,因此如果我将位图传递给 jni,我需要将 r、g、b 值乘以 255,然后除以 alpha 以获得真实值我可以进行 alpha 运算的值。当我把它们传回去时,我必须做相反的事情。

仅对于不需要 alpha 的复制和操作,这是不必要的,因为 alpha 将是 255 以获得最大不透明度,而 * 255/255 会自行取反。

关于java - 如何修改 NDK 中的 Android 位图以便我可以在 Java 端使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com