Imagemagick 在编写修改过的像素数据包时,有没有办法强制Magick++跳过缓存?

Imagemagick 在编写修改过的像素数据包时,有没有办法强制Magick++跳过缓存?,imagemagick,magick++,Imagemagick,Magick++,我已经编写了一个程序,该程序仅依靠Magick++导入和导出各种图像格式。它使用Image.getPixels获取像素包,进行大量矩阵变换,然后在写入新图像之前调用Image.syncPixels。一般方法与中所示的示例相同。或多或少,相关代码是: Magick::Image image("image01.bmp"); image.modifyImage(); Magick::PixelPacket *imagePixels = image.getPixels(0, 0, 10, 10); //

我已经编写了一个程序,该程序仅依靠Magick++导入和导出各种图像格式。它使用Image.getPixels获取像素包,进行大量矩阵变换,然后在写入新图像之前调用Image.syncPixels。一般方法与中所示的示例相同。或多或少,相关代码是:

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.syncPixels之前;,强制进行这种无关紧要的更改确实为相同格式的图像带来了正确的结果

有没有办法强迫Magick++意识到缓存已过时?首先,我是否错误地使用了getPixels和syncPixels?谢谢