【问题标题】:FrameBuffer.insert() will result in a access violation during loading of EXR imageFrameBuffer.insert() 在加载 EXR 图像时会导致访问冲突
【发布时间】:2022-10-06 07:30:32
【问题描述】:

我有以下函数来加载OpenEXR image,它基本上只是从their examples复制而来:

void HDrRenderer::ReadExrImage(
    const char fileName[],
    Imf::Array2D<half>& rPixels,
    Imf::Array2D<half>& gPixels,
    Imf::Array2D<float>& zPixels,
    int& width, int& height)
{
    Imf::InputFile file(fileName);
    auto header = file.header();
    Imath::Box2i dw = header.dataWindow();

    width = dw.max.x - dw.min.x + 1;
    height = dw.max.y - dw.min.y + 1;

    rPixels.resizeErase(height, width);
    gPixels.resizeErase(height, width);
    zPixels.resizeErase(height, width);

    Imf::FrameBuffer frameBuffer;

    frameBuffer.insert(\"R\",
        Imf::Slice(Imf::HALF,
            (char*)(&rPixels[0][0] - dw.min.x - dw.min.y * width),
            sizeof(rPixels[0][0]) * 1,
            sizeof(rPixels[0][0]) * width,
            1, 1, 0.0));

    frameBuffer.insert(\"G\",
        Imf::Slice(Imf::HALF,
            (char*)(&gPixels[0][0] - dw.min.x - dw.min.y * width),
            sizeof(gPixels[0][0]) * 1,
            sizeof(gPixels[0][0]) * width,
            1, 1, 0.0));

    frameBuffer.insert(\"Z\",
        Imf::Slice(Imf::FLOAT,
            (char*)(&zPixels[0][0] - dw.min.x - dw.min.y * width),
            sizeof(zPixels[0][0]) * 1,
            sizeof(zPixels[0][0]) * width,
            1, 1, FLT_MAX));

    file.setFrameBuffer(frameBuffer);
    file.readPixels(dw.min.y, dw.max.y);
}

我的问题很简单:任何FrameBuffer.insert() 方法都会使程序崩溃,并显示以下消息:

在 MyAwesomeProgram.exe 中的 0x00007FFDE6BFC1AE (OpenEXR-3_1.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x0000000000000019。

我已经尝试将Slice 分开-> 问题确实出在insert() 方法的某个地方。我很好奇可能是什么原因,如何找到它以及如何解决问题。

    标签: c++ openexr


    【解决方案1】:

    我有同样的问题。有没有可以分享的解决方案?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 2012-01-12
      • 2012-05-22
      相关资源
      最近更新 更多