• 16910阅读
  • 16回复

如何制作水平翻转? [复制链接]

上一主题 下一主题
离线awpawp
 

只看楼主 倒序阅读 楼主  发表于: 2011-01-17
— 本帖被 XChinux 执行加亮操作(2011-01-17) —
继承QGraphicsWidget写了一个类存放一张大图片5张小图片,现在想对这个QGraphicsWidget以它的左侧进行水平180°翻转的动画,要求翻转过后的图片显示不应该发生改变。最终的效果和平移一样,但是现在要实现这个翻转的动画应该怎么做啊???现在征求各位大大给指点一下。谢谢,只有44分了。。。
离线XChinux

只看该作者 1楼 发表于: 2011-01-17
                QTransform transform(item->transform());
                transform.rotate(180, Qt::YAxis);
                transform.translate(item->boundingRect().width() * -1, 0);
                item->setTransform(transform);
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线awpawp

只看该作者 2楼 发表于: 2011-01-19
引用第1楼XChinux于2011-01-17 21:19发表的 :
                QTransform transform(item->transform());
                transform.rotate(180, Qt::YAxis);
                transform.translate(item->boundingRect().width() * -1, 0);
                item->setTransform(transform);


我试了一下这个好像是不行,这种做法是进行坐标系的翻转,翻转过后的还有还原坐标系的问题,再就是图片在翻转的过程中,图片显示的形式不能发生改变,不能再翻转到90°之后图片显示的是图片的背面
[ 此帖被awpawp在2011-01-19 12:30重新编辑 ]
离线XChinux

只看该作者 3楼 发表于: 2011-01-19
动画用animation(QAnimationProperty),翻转过程,就是构造QTransform 或QMatrix等矩阵的过程。对这方面不熟悉。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线0354030w

只看该作者 4楼 发表于: 2011-03-24
我对这个问题也比较感兴趣,不知LZ解决了没有!能否分享下经验
离线XChinux

只看该作者 5楼 发表于: 2011-03-27
那就参考Qt Quick中的那个 Flipable部件效果吧。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线winlow
只看该作者 6楼 发表于: 2011-04-23
setTransform(QTransform().rotate(angle,Qt::YAxis));[pre]setTransform(QTransform().rotate(angle,Qt::XAxis));[/pre][pre]水平和竖直翻转[/pre]
离线allblue

只看该作者 7楼 发表于: 2011-04-25
使用QTransform 进行翻转,其翻转原点可以改变吗?也就是说如何设置翻转的原点呢?小弟也在弄这个,QTransform::translate() 可以吗?
黑暗魔法
离线voidbroken

只看该作者 8楼 发表于: 2011-04-28
又要想有翻转的效果,又要在最终表现上与原来一样,只能重画了
离线zscshark
只看该作者 9楼 发表于: 2011-05-04
//Function: 按水平轴或垂直轴作镜像翻转。
//Parameters:
//    bIsHorizon: 按水平轴翻转为true;反之则为false;
void ImageViewer::filpImage(bool bIsHorizon)  
{  
    image = image.mirrored(bIsHorizon, !bIsHorizon);  
    imageLabel->setPixmap(QPixmap::fromImage(image));  
}
在网上看到的,可以做到翻转的效果
离线zscshark
只看该作者 10楼 发表于: 2011-05-04
//Function: 将图片按顺时钟方向旋转一定的角度。
//Parameters:
//    fAngle: 旋转的角度值
void ImageViewer::rotateImage(double fAngle)
{
    QMatrix matrix;  
    matrix.rotate(fAngle);  
    image = image.transformed(matrix,Qt::FastTransformation);  
    imageLabel->setPixmap(QPixmap::fromImage(image));  
}
这个是调角度的
离线myseemylife

只看该作者 11楼 发表于: 2011-05-05
这样翻转图片之后,为什么图片会变的没有原来清晰了呢???
补充一下,水平垂直翻转图像质量还挺好的。按角度翻转图片翻的越多质量越差
[ 此帖被myseemylife在2011-05-05 15:12重新编辑 ]
蠢笨的愚钝~
离线zscshark
只看该作者 12楼 发表于: 2011-05-05
估计是角度翻转后像素点打印的不好吧
离线dlmult
只看该作者 13楼 发表于: 2011-05-06
路过学习一下.
离线sbtree
只看该作者 14楼 发表于: 2011-05-06
引用楼主awpawp于2011-01-17 18:31发表的 如何制作水平翻转? :
继承QGraphicsWidget写了一个类存放一张大图片5张小图片,现在想对这个QGraphicsWidget以它的左侧进行水平180°翻转的动画,要求翻转过后的图片显示不应该发生改变最终的效果和平移一样,但是现在要实现这个翻转的动画应该怎么做啊???现在征求各位大大给指点一下。谢谢,只有44分了。。。

这么多矛盾的需求,既然是以左边为轴翻转,那末翻转之后应该与原来的样子对称才是,怎么可能与平移的效果一样呢?看不懂
windows 7 + VC++2008 + Qt4.5.2
离线tiandi2011
只看该作者 15楼 发表于: 2011-06-21
连番2次,这样就是原来的样子,动画也好理解
离线kimtaikee

只看该作者 16楼 发表于: 2011-06-21
Like this ?

快速回复
限100 字节
 
上一个 下一个