Я работаю с простым скриптом в RenderScript. Мне нужно изменить значения RGBA на пиксель из растрового изображения. После многих попыток я обнаружил, что альфа-канал не изменяется.RenderScript не изменяет альфа-канал? [Android]
Я провел несколько исследований, и я нашел this old question, но я не понимаю, как и почему это происходит. Правильно ли вы используете modiphy Alpha-канал в скрипте?
Вот усеченную версию моего кода:
Java сторона:
Allocation img= Allocation.createFromBitmap(encodeRS, bmp,Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
Renderscript сторона:
uchar4 __attribute__((kernel)) root(uchar4 in, uint32_t x, uint32_t y) {
uchar r= (in.r) & 0xFC;
uchar g= (in.g) & 0xFC;
uchar b= (in.b) & 0xFC;
uchar a= (in.a) & 0xFC;
return (uchar4) {r,g,b,a};
}
Я также попытался с привязкой памяти, но результат тот же:
void root(uchar4* in, uint32_t x, uint32_t y) {
uchar r= (in->r) & 0xFC;
uchar g= (in->g) & 0xFC;
uchar b= (in->b) & 0xFC;
uchar a= (in->a) & 0xFC;
in->r= r;
in->g= g;
in->b= b;
in->a= a;
}
Затем я делаю copyTo со стороны java (после forEach), но альфа-канал устанавливается автоматически на 255.
img.copyTo(bmp);
В любом случае, спасибо за поддержку.
- Update 1:
Я забыл упомянуть, что я получаю Bitmap из файла с getAbsolutePath(), как это:
Bitmap bmp= BitmapFactory.decodeFile(imgFile.getAbsolutePath());
Вы хотите | Allocation.USAGE_SHARED, так как это уменьшит количество копий на большинстве растровых изображений. –
Благодаря обоим. Я получаю битмап из пути из SDCARD, например: Bitmap bmp = BitmapFactory.decodeFile (imgFile.getAbsolutePath()); Я проверю с помощью общего растрового изображения, созданного с помощью ARGB_8888, если это вызывает проблему. – gabrielication