Есть ли способ заставить Magick ++ пропускать свой кеш при написании модифицированных PixelPackets? - PullRequest
1 голос
/ 24 января 2012

Я написал программу, которая использует Magick ++ просто для импорта и экспорта различных форматов изображений. Он использует Image.getPixels () для получения PixelPacket, выполняет множество матричных преобразований, затем вызывает Image.syncPixels () перед записью нового изображения. Общий подход такой же, как в примере, показанном в документации Magick ++ . Более или менее соответствующий код:

Magick::Image image("image01.bmp");
image.modifyImage();
Magick::PixelPacket *imagePixels = image.getPixels(0, 0, 10, 10);
// Matrix manipulation occurs here.
// All actual changes to the PixelPacket direct changes to pixels like so:
imagePixels[i].red = 4; // or any other integer
// finally, after matrix manipulation is done
image.syncPixels();
image.write("image01_transformed.bmp");

Когда я запускаю приведенный выше код, новый файл изображения (в данном примере «image01_transformed.bmp») заканчивается так же, как и оригинал. Однако, если я напишу его в другом формате, например, «image01_transformed.ppm», я получу правильный результат: измененное изображение. Я предполагаю, что это связано с кэшированной версией изображения в кодированном формате и тем, что Magick ++ по какой-то причине не знает, что изображение действительно изменено и, следовательно, кэш устарел. Я проверил эту идею, добавив image.blur(1.0, 0.1); непосредственно перед image.syncPixels();, и форсирование этого несущественного изменения действительно привело к правильному результату для изображений того же формата.

Есть ли способ заставить Magick ++ понять, что кеш устарел? Я неправильно использую getPixels() и syncPixels()? Спасибо!

...