我通过3位图图像接收800乘600,并将其作为参数提供给glDrawPixels()。在给glDrawPixels之前,我想旋转90度的位图。那可能吗?如何旋转位图图像
的情况下,它不是一个位图,而是像PNG图像,我会做到以下几点:
QMatrix rm;
rm.rotate(90);
pixmap = pixmap.transformed(rm);
pixmap.scaled(801, 701);
texture = bindTexture(pixmap);
我通过3位图图像接收800乘600,并将其作为参数提供给glDrawPixels()。在给glDrawPixels之前,我想旋转90度的位图。那可能吗?如何旋转位图图像
的情况下,它不是一个位图,而是像PNG图像,我会做到以下几点:
QMatrix rm;
rm.rotate(90);
pixmap = pixmap.transformed(rm);
pixmap.scaled(801, 701);
texture = bindTexture(pixmap);
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);
如回答liuyi.luo,这样做的正常方式是使用QImage
并在转换之前以所需格式传递原始数据。
不幸的是Qt不支持BGR通道顺序。你将不得不寻找第三方库,或者推出你自己的算法 - 如果你旋转90度,这应该是非常微不足道的。 Here是就地旋转的体面实施。
这种方式很棘手,但我完全不理解它。我收到800×600×3的数据包并将其附加到一个数组,直到它完全读取位图大小。接下来,我现在正在处理一个由800乘以600的数组,我该如何交换它的列和行! – Sam
在执行时忽略我的猜测,它根本不起作用!我已经编辑了一个经过测试的链接。 – cmannett85
您不能将QPixmap作为glDrawPixels的参数。你的*实际*代码是什么? – peppe
QMatrix已过时,请改用QTransform。 –
是的,我知道,假设我有一个BGR数组,然后将其传递给glDrawPixels,我如何将它旋转90度? – Sam