我正在使用 OpenEXR 库加载图像。
这工作正常,只是图像加载时旋转了 180 度。我使用下面所示的循环来反转数组,但有时程序会退出,xcode 会给我一个 EXEC_BAD_ACCESS 错误(我认为这与 msvc 中的访问冲突相同)。它不会每次都会发生,只是每 5-10 次发生一次。
理想情况下,我想就地反转数组,尽管这每次都会导致错误,并且使用 memcpy 会失败,但不会导致错误,只是一个空白图像。我想先知道是什么原因导致了这个问题。
这是我正在使用的代码:(Rgba 是由 4 个“Half”r、g、b 和 a 组成的结构,在 OpenEXR 中定义)
Rgba* readRgba(const char filename[], int& width, int& height){
Rgba* pixelBuffer = new Rgba[width * height];
Rgba* temp = new Rgba[width * height];
// ....EXR Loading code....
// TODO: *Sometimes* the following code results in a bad memory access error. No idea why.
// Flip the image to conform with OpenGL coordinates.
for (int i = 0; i < height; i++){
for(int j = 0; j < width; j++){
temp[(i*width)+j] = pixelBuffer[(width*height)-(i*width)+j];
}
}
delete pixelBuffer;
return temp;
}
提前致谢!
最佳答案
更改:
temp[(i*width)+j] = pixelBuffer[(width*height)-(i*width)+j];
至:
temp[(i*width)+j] = pixelBuffer[(width*height)-(i*width)+j - 1];
(提示:想想当 i = 0 且 j = 0 时会发生什么!)
关于c++ - 有时我在反转数组时会遇到 EXEC_BAD_ACCESS (访问冲突),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3329120/