我在我的项目中包含了openexr源代码(从http://www.openexr.com/downloads.html下载)来解码openexr图像。
我已经为64位( mac和windows)构建了我的项目,并试图打开以下文件:https://github.com/openexr/openexr-images/blob/master/ScanLines/Blobbies.exr
它在openexr源代码中崩溃,同时打开这个openexr文件。
rgbaFile =新货币基金组织::RgbaInputFile(“Blobbies.exr”);
rgbaFile->setFrameBuffer(像素- datawindow.min.x - (y * exrDimension.mWidth),1,mWidth);
rgbaFile->readPixels(datawindow.min.y,datawindow.max.y);
该文件具有数据窗口(-20,-20)到(1020,1020)和显示窗口(0,0)到(999,999)。
我能够正确地打开它时,尝试32位的建设,我的项目。
发布于 2017-10-15 08:56:41
我已经找到了问题的原因。问题不是在openexr中,而是在传递给setFrameBuffer()的参数中,即
像素- datawindow.min.x - (y * exrDimension.mWidth)
这里,y是int32类型,而exrDimension.mWidth是无符号int32类型。当这两者相乘时,会给出一个非常大的无符号int32类型值。当在setFrameBuffer函数中接收到表达式on时,表达式的总体类型是不同的。这取决于机器的结构。如果arch为32位,则为int32,如果为64位arch,则为int64。
在32位arch上,总体结果是int32的类型,给出了正确的值,而在64位arch上,由于y是负值,这个值是不正确的,不能用无符号int32表示。
https://stackoverflow.com/questions/46669968
复制相似问题