Как манипулировать JPEG в cpp с помощью символов?
Я испытываю очень странное поведение в cpp. Я делаю некоторую параллельную обработку изображений с использованием инфраструктуры MPI, и мне нужно преобразовать 2D-массив JSAMPLE в плоский массив беззнаковых символов. Я могу сделать это, однако, когда я пытаюсь записать изображение из плоского массива в файл 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 ответ
Вместо flat_image_array[j*k+k]
ты хочешь flat_image_array[j*Input.Width+k]
, При неправильной индексации flat_image_array
Вы оставляете дыры и перезаписываете предыдущие значения.