2017-10-10 121 views
0

我已經包含了openexr源代碼(從http://www.openexr.com/downloads.html下載)來解碼我的項目中的openexr圖像。試圖在64位機器上打開openexr文件時在openexr中崩潰

我建立了我的項目爲64位(在Mac和Windows上),並試圖打開以下文件: https://github.com/openexr/openexr-images/blob/master/ScanLines/Blobbies.exr

它崩潰的OpenEXR源內同時打開此文件的OpenEXR。

rgbaFile = new Imf :: RgbaInputFile(「Blobbies.exr」);

rgbaFile-> setFrameBuffer(pixel-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位版本上嘗試正確打開它。

回答

0

我找到了問題的原因。 的問題並不是OpenEXR的API,但在參數被傳遞到setFrameBuffer() ,即

像素 - datawindow.min.x - (Y * exrDimension.mWidth)

這裏,y是爲Int32而exrDimension.mWidth是unsigned int32類型。當這兩個數相乘時給出非常大的unsigned int32類型的值。在setFrameBuffer函數內部接收到的表達式結果的整體類型是不同的。這取決於機器的架構。如果arch爲32位,則爲int32,如果是64位arch,則爲int64。

在32位拱形上,總體結果爲類型轉換爲int32,它給出了正確的值,而在64位拱形中,由於y爲負值,此值不正確,無法用無符號int32表示。