我在cpp中遇到了非常奇怪的行为。我正在使用MPI框架进行一些并行图像处理,并且需要将JSAMPLE的2D数组转换为无符号字符的平面数组。 我能够做到这一点,但是当我尝试将平面阵列中的图像写入JPEG文件时,输出是模糊的,但是如果我在同一点设置平面数组的输出值,我会从2d阵列它工作正常。
这对我来说很奇怪。我是一位经验丰富的cpp开发人员,但对JPEG库没有那么多工作。
我认为它可能与内存分配有关。
// create a flat array of unsigned chars from image
char* flat_image_array = new char[span*Input.Width*Input.Components];
for(int j = 0; j < span; ++j) {
for (int k = 0; k < Input.Width * Input.Components; ++k) {
flat_image_array[j*k+k] = imageSegment[j][k];
// if I set output here it works fine
//Output.Rows[j][k] =flat_image_array[j*k+k];
}
}
for(int j = 0; j < span; ++j) {
for (int k = 0; k < Input.Width * Input.Components; ++k) {
//but if I set output here the image comes out very fuzzy
Output.Rows[j][k] = flat_image_array[j*k+k];
}
}
std::stringstream file;
file << "Data/segment_" << (i) <<".jpg";
if(!Output.Write(file.str().c_str())){
printf("Cannot write image\n");
return;
}
答案 0 :(得分:0)
而不是flat_image_array[j*k+k]
,而不是flat_image_array[j*Input.Width+k]
。通过错误地为flat_image_array
编制索引,您将留下漏洞并覆盖以前的值。