0

特定の色のピクセルをクリアするスクリプトがあります。

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;
}

私がJavaで実行していること:

        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 で特定の色のピクセルを持つ明確なピクセルの隣人が必要ですか? 飽和状態では、すべてのピクセルを処理していますが、すべてのピクセルにアクセスする方法がわかりません。

4

1 に答える 1

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);
于 2016-12-03T22:16:20.593 に答える