rsGetElementAt_uchar4 的问题

Problems with rsGetElementAt_uchar4

我正在尝试在 RenderScript 中实现中值过滤器。但是代码的工作并不稳定。读取不是来自当前行 rsGetElementAt_uchar4 (inputAlloc, x, y + a) 的元素会导致错误。问题是什么 ?是否有使用 RenderScript 的此类过滤器的示例?

    #pragma version(1)
#pragma rs java_package_name(a.myapplication)
#pragma rs_fp_relaxed


rs_allocation inputAlloc;
int bWidht, bHeight;

static uchar4 arrpix[9];
static uchar4 buff;

uchar4 __attribute__((kernel)) median(uchar4 in, uint32_t x, uint32_t y)
{

uchar4 arrpix[9];
uchar4 buff;

                      if((x<bWidht) && (y<bHeight)){
        arrpix[0] = rsGetElementAt_uchar4(inputAlloc, x -1 , y - 1);
        arrpix[1] = rsGetElementAt_uchar4(inputAlloc, x    , y - 1);
        arrpix[2] = rsGetElementAt_uchar4(inputAlloc, x +1 , y - 1);


        arrpix[3] = rsGetElementAt_uchar4(inputAlloc, x -1 , y    );
        arrpix[4] = in;
        arrpix[5] = rsGetElementAt_uchar4(inputAlloc, x +1 , y    );

        arrpix[6] = rsGetElementAt_uchar4(inputAlloc, x -1 , y + 1);
        arrpix[7] = rsGetElementAt_uchar4(inputAlloc, x    , y + 1);
        arrpix[8] = rsGetElementAt_uchar4(inputAlloc, x +1 , y + 1);


for(int i=0; i<4; i++)

for(int i=0; i<=8; i++){

if(arrpix[i].r>arrpix[i+1].r){
buff.r = arrpix[i].r; arrpix[i].r = arrpix[i+1].r;
arrpix[i+1].r = buff.r;}

if(arrpix[i].g>arrpix[i+1].g){
buff.g = arrpix[i].g; arrpix[i].g = arrpix[i+1].g;
arrpix[i+1].g = buff.g;}

if(arrpix[i].b>arrpix[i+1].b){
buff.b = arrpix[i].b; arrpix[i].b = arrpix[i+1].b;
arrpix[i+1].b = buff.b;}

}
}
    return arrpix[4];
}

您需要检查 x>0 和 y>0,因为 0-1 =-1

底部循环看起来也不完全正确。你能修复间距吗?你的意思是在两个循环中都使用 i 吗?