如何使用chars在cpp中操作JPEG?

时间:2017-05-17 19:35:15

标签: c++ mpi jpeg

我在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;
}

1 个答案:

答案 0 :(得分:0)

而不是flat_image_array[j*k+k],而不是flat_image_array[j*Input.Width+k]。通过错误地为flat_image_array编制索引,您将留下漏洞并覆盖以前的值。