【发布时间】:2020-10-20 12:44:55
【问题描述】:
我遇到了位图在表面视图上未正确呈现的问题。 使用 ANativeWindow 在本机层中完成渲染。为了确认我从相机收到的图像是好的,我已经将缓冲区转储到文件系统上,它看起来不错,但是当尝试渲染它时,它如下图所示。
这是我尝试将位图复制到 ANativeWindow 的方式。
static int counter = 0;
std::string name = "/sdcard/irImage" + std::to_string(counter++) + ".png";
stbi_write_png(name.c_str(), WIDTH, HEIGHT, 4, mFormattedIRBuffer, WIDTH*4);
ANativeWindow_Buffer buffer;
if (_window)
{
if (ANativeWindow_lock(_window, &buffer, NULL) == 0)
{
memcpy(buffer.bits, mFormattedIRBuffer, WIDTH * HEIGHT * 4);
ANativeWindow_unlockAndPost(_window);
}
}
当我尝试渲染单一颜色(紫色、黄色、粉红色)时,它在表面视图上正确显示。
知道我在这里缺少什么吗?
更新:
由于某种原因,buffer.stride 与 buffer.width 不同,我相信这会导致表面视图的失真。我使用的分辨率是 224x171 步幅似乎是 256。当使用更高分辨率时,我没有这个问题。步幅始终与图像的宽度相同。
【问题讨论】:
标签: android camera android-ndk video-streaming android-camera