[英]Allocation.copyTo(Bitmap) corrupting pixel values
我是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);
}
}
這里我們只寫出一個不透明的紅色像素。 調試行似乎打印正確的值(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問題,但我的理解是,從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,然后將Allocation用作普通位圖,則應返回(r * a,g * a,b * a,a)。
但是,如果您將分配發送到未預乘的GL表面,則您的代碼將按原樣運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.