【发布时间】:2013-08-06 12:15:26
【问题描述】:
我是 Renderscript 的新手,我的第一个脚本遇到了一些问题。据我所知(从我插入的调试语句中)我的代码工作正常,但是当通过 Allocation.copyTo(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);
}
}
这里我们只是写出一个不透明的红色像素。调试行似乎打印了正确的值 (255 0 0 255),并且确实在位图中我得到了一个红色像素。
但是,如果我稍微改变红色像素上的 alpha:
*v_out = rsPackColorTo8888(1.f, 0.f, 0.f, 0.998f);
调试打印 (255 0 0 254) 看起来仍然正确,但最终的像素值最终是 (0 0 0 254) 即。黑色。
显然我怀疑这是一个预乘 alpha 问题,但我的理解是,从位图复制到位图的分配例程应该为您处理。至少这是 Chet Haase 在这篇博文中的建议:https://plus.google.com/u/0/+ChetHaase/posts/ef6Deey6xKA。
此外,那里的示例计算脚本似乎都没有提到预乘 alpha 的任何问题。我的脚本基于 SDK 中的 HelloComputer 示例。
如果我犯了错误,我希望 RS 大师为我指出。
很遗憾,经过 2 年多的时间,Renderscript 的文档仍然很差。
附言。我使用的位图是 ARGB_888,我正在 SDK18 (Android 4.3) 上构建和定位
【问题讨论】:
-
如果你只修改 rgb 值而不是 alpha 怎么样?
-
问题在于改变 alpha。我可能没有说清楚。只要 alpha 转换为 255 一切都很好。如果是其他任何东西,像素就会被破坏。
-
由于其他示例对其他人来说显然工作正常,我想知道这是 Android 4.3 问题还是 ADT 20.0.5。
-
您是如何创建分配的? createFromBitmap?使用标志是什么?
-
Allocation.createFromBitmap(mRS, bm) 用于 mIn 和 Allocation.createTyped(mRS, mIn.getType()) 用于 mOut
标签: android renderscript