Как отобразить 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,

Другие вопросы по тегам