2016-03-31 40 views
1

RenderScript'teki bir Allocation öğesinden daha fazla Unsura erişmek istiyorum. en Google'dan örnek kod alalım: Bu Tahsis biri Eleman olduğu bir uchar4 alırRenderScript çekirdeğindeki daha fazla Öğeye erişmek mümkün mü? [Android]

uchar4 __attribute__((kernel)) invert(uchar4 in, uint32_t x, uint32_t y) { 
    uchar4 out = in; 
    out.r = 255 - in.r; 
    out.g = 255 - in.g; 
    out.b = 255 - in.b; 
    return out; 
} 

. Birden fazla Elemana erişmek ve manipüle etmek mümkün mü? Bir döngüyü örneğin Bitmap'ten 8 pikselle açmak gibi.

Teşekkür ederiz.

cevap

4

Yazdığınız çekirdek, geçerli piksel verilerine göre geçerli pikseli (x, y) işlemeye izin verir. Komşu piksellere erişmek için, tahsisatı genel bir tahsis olarak tanımlamanız ve ardından komşulara rsGetElementAt_uchar4() tarafından erişmeniz gerekir. Sadece Örnek için aşağıdaki örneğe bakınız.

rs_allocation in; 

uchar4 __attribute__((kernel)) doCalc(uint32_t x, uint32_t y) { 
    uchar4 out; 

    uchar4 same= rsGetElementAt_uchar4(in, x,y); 
    uchar4 top= rsGetElementAt_uchar4(in, x,y-1); 
    uchar4 left= rsGetElementAt_uchar4(in, x-1,y); 
    uchar4 right= rsGetElementAt_uchar4(in, x+1,y); 
    // (...) 

out.r= // do whatever you want with same.r, top.r, left.r etc 
out.g= // do whatever you want with same.g, top.g, left.g etc 
out.b=... 
out.a=255; 

return out; 

} 
+0

Destek için teşekkürler! – gabrielication