如何翻转QImage

3
什么是翻转/镜像QImage的正确方法?以下代码片段无法实现。
 //allocate buffer
 BYTE* pRgb32Buffer = new BYTE[width*height* 4];
 //create paint device
 QImage img = QImage(pRgb32Buffer , width, height, getStride(width, pixelFormat), QImage::Format_RGB32);
 //do some drawing on image (works!) 
 QPainter painter(&img);
 painter.drawText(10, 50, QString("some text"));
 //mirrore image (doesn't mirror the orignal buffer!!!)
 img = img.mirrored(false,true);
 //doesn't work either
 //QImage mirrored = img.mirrored();
 //img = mirrored;
 //mirrored.detach(); 

你有意地使用 pRgb32BufferpBuffer 吗? - Ferenc Deak
你所说的“不起作用”具体指什么?QImage::mirrored()会返回原始图像的副本。镜像不会影响pRgb32Buffer中的数据。除此之外,我看不出为什么它不能工作。 - Dan Milburn
我想操作“pRgb32Buffer”中的数据! - maxw
你尝试过另一个QImage吗?QImage imgMirrored = img.mirrored(false, true); - user4516901
2个回答

3

使用QImage::mirrored()的解决方案:

memmove(pRgb32Buffer, img.mirrored().bits(),img.byteCount());


2

我有一个可以将QPixmap镜像到QImage的可用代码。

QPixmap* source = //... Getting my pixmap form somewhere...
QImage target(QSize(source->width(), source->height()), QImage::Format_ARGB32);
QPainter painter(&target);
QTransform transf = painter.transform();
transf.scale(-1, 1);
painter.setTransform(transf);
painter.drawPixmap(-source->width(), 0, *source);

source包含上述代码后的镜像像素图。您可以使用QImageQPainter::drawImage函数作为替代方法。

如果需要,您可以选择保存文件(请确保您拥有imageformats dll文件,否则无法写入):

QImageWriter writer("c:\\theimage.tiff", "tiff");
writer.setCompression(1);
writer.write(target);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接