Как отобразить JPEG на ANativeWindow?
Я пытаюсь показать JPEG для ANativeWindow с Android NDK. Я получаю ANativeWindow*
при выполнении:
_window = ANativeWindow_fromSurface(env, surface)
Я загружаю JPEG, с помощью libjpeg-turbo, выполнив:
if (tjDecompressHeader2(tj, jpeg, jpegSize, &width, &height, &subsamp) == 0) {
int format = TJPF_ARGB;
int pitch = _windowWidth * tjPixelSize[format];
_bufferSize = pitch * _windowHeight;
_buffer = realloc(_buffer, _bufferSize);
tjDecompress2(tj, jpeg, jpegSize, _buffer, _windowWidth, pitch, _windowHeight, format, 0);
}
Мой вопрос, как показать декодированный JPEG на поверхности? В настоящее время я делаю это:
ANativeWindow_Buffer surface_buffer;
if (ANativeWindow_lock(_window, &surface_buffer, NULL) == 0) {
memcpy(surface_buffer.bits, _buffer, _bufferSize);
ANativeWindow_unlockAndPost(_window);
}
Но результат (см. Ниже) не соответствует ожиданиям. Что я должен сделать перед отправкой буфера на поверхность?
Спасибо
1 ответ
Решение
Просто нужно установить формат ANativeWindow с помощью ANativeWindow_setBuffersGeometry(_window, 0, 0, WINDOW_FORMAT_RGBA_8888)
, А потом использовать TJPF_RGBA
формат вместо TJPF_ARGB
,