Так что я пытаюсь передать некоторый код на C++ от коллеги, который захватывает данные изображения через последовательный порт Bluetoth (я пользуюсь телефоном Android). Из данных мне нужно будет создать растровое изображение.BitmapFactory.decodeByteArray() всегда возвращает null (созданный вручную массив байтов)
Перед тем, как тестировать портированный код, я написал эту быструю функцию для suposedly создать чистый красный прямоугольник. Однако BitmapFactory.decodeByteArray() всегда терпит неудачу и возвращает с нулевым битовым отображением. Я проверил оба возможных исключения, которые он может бросить, и никто не бросается.
byte[] pixelData = new byte[225*160*4];
for(int i = 0; i < 225*160; i++) {
pixelData[i * 4 + 0] = (byte)255;
pixelData[i * 4 + 1] = (byte)255;
pixelData[i * 4 + 2] = (byte)0;
pixelData[i * 4 + 3] = (byte)0;
}
Bitmap image = null;
logBox.append("Creating bitmap from pixel data...\n");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.outWidth = 225;
options.outHeight = 160;
try {
image = BitmapFactory.decodeByteArray(pixelData, 0, pixelData.length, options);
} catch (IllegalArgumentException e) {
logBox.append(e.toString() + '\n');
}
//pixelData = null;
logBox.append("Bitmap generation complete\n");
decodeByteArray (код):
public static Bitmap decodeByteArray(byte[] data, int offset, int length, Options opts) {
if ((offset | length) < 0 || data.length < offset + length) {
throw new ArrayIndexOutOfBoundsException();
}
Bitmap bm;
Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "decodeBitmap");
try {
bm = nativeDecodeByteArray(data, offset, length, opts);
if (bm == null && opts != null && opts.inBitmap != null) {
throw new IllegalArgumentException("Problem decoding into existing bitmap");
}
setDensityFromOptions(bm, opts);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS);
}
return bm;
}
я бы предположить, что это nativeDecodeByteArray() что не удается.
Я также заметил, журнальное сообщение:
D/Skia: --- SkImageDecoder :: Фабрика возвращенное нуль
Кто есть какие-нибудь идеи?
«Из данных мне нужно будет создать растровое изображение». Какие данные вы получаете? Если вы получаете файлы изображений, такие как .png или .jpg, ваш подход неверен. – greenapps
Алгоритм захвата относительно сложный, но по существу то, что я получаю, это данные RGB для пикселей в виде 3 байтов. Однако порядок, в котором поступают данные, не является последовательным пикселем из-за аппаратной реализации. –