【问题标题】:rendering bitmap using Android ANativeWindow使用 Android ANativeWindow 渲染位图
【发布时间】: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


    【解决方案1】:

    为了克服 buffer.width 与 buffer.stride 不同的问题,我必须填充图像的宽度以匹配步幅。我有宽度 = 224 和步幅 = 256,所以我在左边使用了 16 的填充,在右边使用了 16。我不确定在处理低分辨率图像时这是否是 ANativeWindow 的限制,但是当我使用高分辨率图像时,宽度和步幅总是相等的

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多