2013-11-28 91 views
1

我通过3位图图像接收800乘600,并将其作为参数提供给glDrawPixels()。在给glDrawPixels之前,我想旋转90度的位图。那可能吗?如何旋转位图图像

的情况下,它不是一个位图,而是像PNG图像,我会做到以下几点:

QMatrix rm; 

rm.rotate(90); 

pixmap = pixmap.transformed(rm); 

pixmap.scaled(801, 701); 

texture = bindTexture(pixmap); 
+0

您不能将QPixmap作为glDrawPixels的参数。你的*实际*代码是什么? – peppe

+0

QMatrix已过时,请改用QTransform。 –

+0

是的,我知道,假设我有一个BGR数组,然后将其传递给glDrawPixels,我如何将它旋转90度? – Sam

回答

7
QImage srcImg(":/icon.png"); 
QPoint center = srcImg.rect().center(); 
QMatrix matrix; 
matrix.translate(center.x(), center.y()); 
matrix.rotate(90); 
QImage dstImg = srcImge.transformed(matrix); 
QPixmap dstPix = QPixmap::fromImage(dstImg); 
+0

正如我所提到的,这不是我正在寻找的。我有一个8000×600×3的BGR原始数据。在给glDrawPixels之前,我想旋转它,但是如何? – Sam

+0

我再次注意到数组包含没有标题的原始图像数据,上面的代码是用于带有png标题的图像。 – Sam

1

如回答liuyi.luo,这样做的正常方式是使用QImage并在转换之前以所需格式传递原始数据。

不幸的是Qt不支持BGR通道顺序。你将不得不寻找第三方库,或者推出你自己的算法 - 如果你旋转90度,这应该是非常微不足道的。 Here是就地旋转的体面实施。

+0

这种方式很棘手,但我完全不理解它。我收到800×600×3的数据包并将其附加到一个数组,直到它完全读取位图大小。接下来,我现在正在处理一个由800乘以600的数组,我该如何交换它的列和行! – Sam

+0

在执行时忽略我的猜测,它根本不起作用!我已经编辑了一个经过测试的链接。 – cmannett85