2016-12-03 7 views
0

私は、特定の色のピクセルを消去するスクリプトを持っています。Android Renderscriptは隣接ピクセルを透明に設定します

私は、Java LILEで実行
uchar red = 100; 
uchar green = 100; 
uchar blue = 100; 
float treshold = 100; 

uchar4 __attribute__((kernel)) saturation(uchar4 in,uint32_t x, uint32_t y) 
{ 
    float ddd = ((in.r - red)*(in.r - red) + (in.g - green)*(in.g - green) + (in.b - blue)*(in.b - blue)); 
    float dif = sqrt(ddd); 
    if (dif <= treshold){ 
     in.a = 0; 
     in.r = 0; 
     in.g = 0; 
     in.b = 0; 
    } 
    return in; 
} 

 mScript.set_red((short)r); 
     mScript.set_blue((short)b); 
     mScript.set_green((short)g); 
     mScript.set_treshold(treshold); 
     mScript.forEach_saturation(mInAllocation, mOutAllocations); 

それは動作しますが、私はのrenderScript内の特定の色のピクセルとの明確なピクセル隣人が必要ですか?彩度ではすべてのピクセルを処理し、すべてのピクセルにアクセスする方法はわかりません。

答えて

1

グローバルrs_allocation変数を使用し、他の場所で画像をサンプリングするrsGetElementAt_uchar4関数を使用:

#pragma rs_fp_relaxed 
rs_allocation image; 
int width_minus_one; 
void RS_KERNEL root(uchar4 in, uint32_t x, uint32_t y) { 
    int newX = min(x + 1, width_minus_one); 
    uchar4 pixel = rsGetElementAt_uchar4(image, newX, y); 
} 

ジャワ:

mScript.set_image(mInAllocation); 
mScript.set_width_minus_one(mInAllocation.getType().getX() - 1); 
関連する問題