Pau*_*eau 5 android renderscript
我是Renderscript的新手,我的第一个剧本引人注目.据我所知(从我插入的调试语句)我的代码工作正常,但是当它们被Allocation.copyTo(Bitmap)方法复制回Bitmap时,计算值会变得严重.
我得到了奇怪的颜色,所以最终剥离了我的脚本到这个样本,显示了问题:
void root(const uchar4 *v_in, uchar4 *v_out, const void *usrData, uint32_t x, uint32_t y)
{
*v_out = rsPackColorTo8888(1.f, 0.f, 0.f, 1.f);
if (x==0 && y==0) {
rsDebug("v_out ", v_out->x, v_out->y, v_out->z, v_out->w);
}
}
Run Code Online (Sandbox Code Playgroud)
这里我们只写出一个不透明的红色像素.调试行似乎打印正确的值(255 0 0 255),实际上我在位图中得到一个红色像素.
但是,如果我稍微更改红色像素上的alpha:
*v_out = rsPackColorTo8888(1.f, 0.f, 0.f, 0.998f);
Run Code Online (Sandbox Code Playgroud)
调试打印(255 0 0 254)仍然看似正确,但最终像素值最终为(0 0 0 254)即.黑色.
显然我怀疑这是一个预先提示的alpha问题,但我的理解是,从Bitmaps复制到Bitmaps的Allocation例程应该为你处理.至少这是Chet Haase在这篇博客文章中建议的:https://plus.google.com/u/0/+ChetHaase/posts/ef6Deey6xKA.
此外,没有任何示例计算脚本似乎提及预乘alpha的任何问题.我的脚本基于SDK中的HelloComputer示例.
如果我犯了一个错误,我会喜欢RS大师为我指出它.
令人遗憾的是,经过2年多的努力,Renderscript的文档仍然很糟糕.
PS.我正在使用的位图是ARGB_888,我正在构建和定位SDK18(Android 4.3)
该示例运行良好,因为该示例不修改 alpha。
如果您要修改 alpha,然后使用分配作为普通位图,您应该返回 (r*a, g*a, b*a, a)。
但是,如果您将分配发送到未预乘的 GL 表面,则您的代码将按原样工作。
| 归档时间: |
|
| 查看次数: |
555 次 |
| 最近记录: |