2015-02-09 4 views
2

Каков правильный способ перевернуть зеркало QImage? Следующий фрагмент не работает.Как перевернуть 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(); 
+0

намеренно у вас есть '' pRgb32Buffer' и pBuffer'? – fritzone

+0

извините. исправлено – maxw

+0

Что именно вы имеете в виду, не работает? QImage :: mirrored() возвращает копию исходного изображения. Зеркалирование не повлияет на данные в pRgb32Buffer. Кроме того, я не вижу причин, почему это не сработает. –

ответ

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 содержит в себе отраженную растровое изображение после этого кода. Вы должны быть в состоянии сделать то же самое с QImage и функцией QPainter::drawImage в качестве альтернативы.

При желании вы можете сохранить файл, если вы хотите (убедитесь, что у вас есть imageformats библиотеки DLL или он не будет писать):

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