我正在尝试使用 Android NDK 向 ANativeWindow 显示 JPEG。
我正在通过以下操作获取 ANativeWindow*
:
_window = ANativeWindow_fromSurface(env, surface)
我正在使用 libjpeg-turbo 加载 jpeg,方法是:
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);
}
但结果(见下文)不是我所期望的。在将缓冲区发送到表面之前我应该做什么?
谢谢
最佳答案
只需使用 ANativeWindow_setBuffersGeometry(_window, 0, 0, WINDOW_FORMAT_RGBA_8888)
设置 ANativeWindow 的格式。然后使用 TJPF_RGBA
格式代替 TJPF_ARGB
。
关于android - 如何在 ANativeWindow 上显示 JPEG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18224949/