Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 随着图像的旋转,图像的大小减小_Image_Qt_Qpixmap - Fatal编程技术网

Image 随着图像的旋转,图像的大小减小

Image 随着图像的旋转,图像的大小减小,image,qt,qpixmap,Image,Qt,Qpixmap,大家好,, 我正在尝试在Qt中旋转图像。当一次又一次地旋转时,图像的大小会减小。我怎样才能阻止这种尺寸减小?请帮帮我。我正在使用这个代码 void MyWidget::rotateLabel() { QPixmap pixmap(*my_label->pixmap()); QMatrix rm; rm.rotate(90); pixmap = pixmap.transformed(rm); my_label->setPixmap(pixmap)

大家好,, 我正在尝试在Qt中旋转图像。当一次又一次地旋转时,图像的大小会减小。我怎样才能阻止这种尺寸减小?请帮帮我。我正在使用这个代码

void MyWidget::rotateLabel()
{
    QPixmap pixmap(*my_label->pixmap());
    QMatrix rm;
    rm.rotate(90);
    pixmap = pixmap.transformed(rm);
    my_label->setPixmap(pixmap);
}

在QPixmap::transformed的Qt帮助文件中,它声明:-

变换会在内部进行调整,以补偿 不必要的翻译;i、 e.生成的pixmap是最小的pixmap 包含原始pixmap的所有变换点的。使用 函数的作用是:检索用于 转换pixmap

我假设图像的宽度和高度不相等。因此,正如您所观察到的,每次旋转都会减小大小,以确保保持完整的图像

通过添加边框将原始图像更改为具有相同的宽度和高度,或在旋转之前或之后缩放图像,但图像质量将受到影响

或者,如果您总是旋转90度,您可以在外部艺术程序中旋转图像,加载所有4个图像,只设置您想要的图像,而不是通过Qt旋转它们

============================================================================================================

为了响应具有不同旋转的注释,您需要确保您有一个从未旋转过的源图像,然后对于每个迭代,从源图像创建一个图像,以防止图像大小和图像质量的降低

在伪代码中,它是这样的:-

Image srcImage(":/myimage");

void MyWidget::rotateLabel()
{
    Image img(srcImage);
    img.rotate(rotation);
    label->setPixmap(img);
}

今天早些时候我不得不解决这个问题。首先,确保您的QLabel小部件没有将scaledContents标志设置为True;第二,当以45度旋转时,图像需要缩放以适应QLabel的边界;基本上,您需要将其缩放到dimension/sqrt(2)。然后,也只有这样,你才能用你的旋转变换图像

我在PyQt工作,但同样的原则也适用

    label = my_QLabel_instance
    angle = my_arbitrary_angle
    image = some_stored_reference_to_original_QImage_instance
    dimension = dimension / sqrt(2)

    transform = QtGui.QTransform().rotate(angle)
    pixmap = QtGui.QPixmap(image)
    pixmap = pixmap.scaled(dimension, dimension)
    pixmap = pixmap.transformed(transform, QtCore.Qt.SmoothTransformation)

    label.setPixmap(pixmap)

谢谢你的帮助梅林,我已经尝试在旋转后调整图像的大小,但是图像的大小仍然减小。请告诉我其他的事情或者其他任何人可以帮我解决这个问题。你总是旋转90度吗?不,梅林,它不总是90度,它可能是25,35,37128230意味着它不是一个固定的值。