簡體   English   中英

Allocation.copyTo(Bitmap)破壞像素值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM