Я получаю растровые изображения в формате ARGB8888, но мне нужно обработать их с помощью некоторого алгоритма, который принимает только RGB565. Я хочу преобразовать это растровое изображение в новый формат с помощью Renderscript, но кажется, что распределение на входе и выходе должно быть одинаковым (или совместимым). bitmapIn имеет тип ARGB_8888, а bitmapOut имеет тип RGB_565.
Вызвано: android.renderscript.RSIllegalArgumentException: вид выделения — PIXEL_RGBA, тип UNSIGNED_8 из 4 байт, переданное растровое изображение — RGB_565.
Ява:
public void convert(final Bitmap bitmapIn, Bitmap bitmapOut)
{
mInAllocation = Allocation.createFromBitmap(mRS, bitmapIn, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
Type.Builder tb = new Type.Builder(mRS, Element.RGB_565(mRS)).setX(bitmapIn.getWidth()).setY(bitmapOut.getWidth());
mOutAllocation = Allocation.createTyped(mRS, tb.create());
// Call custom method (not forEach_root) so we can have uchar4 in and uchar3 out
mScript.forEach_convert(mInAllocation, mOutAllocation);
mOutAllocation.copyTo(bitmapOut);
}
Рендерскрипт:
// Convert to RGB565 by quantizing the individual channels
void convert(const uchar4* v_in, uchar3* v_out)
{
v_out->x = v_in->x >> 3;
v_out->y = v_in->y >> 2;
v_out->z = v_in->z >> 3;
}
Обратите внимание: если я сделаю оба растровых изображения ARGB_8888 и заставлю convert() работать с обоими uchar4* (и просто скопирую альфа-(w)-канал, то я увижу, что растровое изображение изменено.
Я знаю, что 565 равно 16 битам, так что на самом деле это скорее uchar2, но это также несовместимо с распределением по типу.
Как можно сделать это преобразование типа в Renderscript?