0

root()関数内の割り当てで現在のインデックスを知るにはどうすればよいですか?

今のところ、私は追加のポインターをバインドすることによってそれを行っています-割り当ての開始。このようなもの:

//Javaコード
Allocation in = Allocation.create ...;
mScript.bind_gStart(in);

次に、renderscriptでポインタ演算を使用します。

//RSファイル-1D配列を想定
void root(const uint8_t * in){
  size_t idx = in --gStart;
  ..。
}

これは動作することが保証されていますか?これを行うためのより良い/より簡単な方法はありますか?どういうわけか、curIdx疑似変数か何かが必要だと思います。

4

1 に答える 1

1

一般的なroot()関数のプロトタイプは次のとおりです。

void root(const uchar4 *data_in, uchar4 *data_out, const void * usrData, uint32_t x, uint32_t y)

xおよびyパラメーターは、入力割り当て内のインデックスを指定します。私はこれらを次のような画像処理にうまく使用しました:

void root(const uchar *data_in, uchar4 *data_out, const void * usrData, uint32_t x, uint32_t y) {
int sum_x;
int sum_y;
unsigned char channel;
int color;

width = rsAllocationGetDimX(gIn);
height = rsAllocationGetDimY(gOut);

if ( (x > 1) & (y > 1) & (x < width-1) & (y < height-1)) {
    sum_x = 0;
    sum_x += -1 * gPixels[(y-1)*width+x-1];
    sum_x +=  1 * gPixels[(y-1)*width+x+1];
    sum_x += -2 * gPixels[y*width+x-1];
    sum_x +=  2 * gPixels[y*width+x+1];
    sum_x += -1 * gPixels[(y+1)*width+x-1];
    sum_x +=  1 * gPixels[(y+1)*width+x+1];

    sum_y = 0;
    sum_y += -1 * gPixels[(y-1)*width+x-1];
    sum_y += -2 * gPixels[(y-1)*width+x];
    sum_y += -1 * gPixels[(y-1)*width+x+1];
    sum_y +=  1 * gPixels[(y+1)*width+x-1];
    sum_y +=  2 * gPixels[(y+1)*width+x];
    sum_y +=  1 * gPixels[(y+1)*width+x+1];

    //channel = (byte) (Math.hypot(sum_x,  sum_y)); // L2 norm
    channel = (uchar) (abs(sum_x) + abs(sum_y)); // L1 norm
    //color = 0xFF000000 | (channel << 16) | (channel << 8) | channel;
    data_out->w = 0xFF;
    data_out->x = channel;
    data_out->y = channel;
    data_out->z = channel;
}
else {
    data_out->w = 0xFF;
    data_out->x = 0xFF;
    data_out->y = 0xFF;
    data_out->z = 0xFF;
}

}

于 2012-07-13T15:24:45.057 に答える