找回密码
 立即注册
12
返回列表 发新帖
收起左侧
楼主: yafeilinux

第15篇 2D绘图(五)绘制图片

37
回复
40551
查看
[复制链接]
累计签到:1568 天
连续签到:1 天
2015-8-18 09:36:00 显示全部楼层
z55716368 发表于 2015-8-15 09:29
我想问问 为什么图像旋转的时候painter.drawPixmap(100, 100, 129, 66, pix);会到左下角的位置
使用90°旋 ...

可以考虑下原点、坐标轴变换等因素,然后编写程序验证自己的假设。

点评

测试了,应该是我猜测的那样。后来接着看后面的几章 也有说 主要是坐标轴变换了 谢谢回复  详情 回复 发表于 2015-8-18 15:24
回复 支持 反对

使用道具 举报

累计签到:256 天
连续签到:1 天
2015-8-18 15:24:05 显示全部楼层
yafeilinux 发表于 2015-8-18 09:36
可以考虑下原点、坐标轴变换等因素,然后编写程序验证自己的假设。

测试了,应该是我猜测的那样。后来接着看后面的几章 也有说 主要是坐标轴变换了 谢谢回复
回复 支持 反对

使用道具 举报

累计签到:16 天
连续签到:1 天
2016-3-4 11:45:17 显示全部楼层
本帖最后由 a35566 于 2016-3-4 11:47 编辑

QPixmap无法从qrc里头读取图片吗?
pix.load("qrc:/picture_test/Resources/location.png");
图片显示不出来。
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-3-4 12:11:45 显示全部楼层
a35566 发表于 2016-3-4 11:45
QPixmap无法从qrc里头读取图片吗?
pix.load("qrc:/picture_test/Resources/location.png");
图片显示不出 ...

试试:

pix.load(":/picture_test/Resources/location.png");

版本问题造成的。
回复 支持 反对

使用道具 举报

累计签到:16 天
连续签到:1 天
2016-3-4 13:16:02 显示全部楼层
本帖最后由 a35566 于 2016-3-4 13:19 编辑
yafeilinux 发表于 2016-3-4 12:11
试试:

pix.load(":/picture_test/Resources/location.png");

谢谢,可行。
现在有个问题,在 QPixmap::scaled 中,Qt::KeepAspectRatio 参数是在 QPainter 所绘制的矩形中保持宽高比不变。
但是我现在有个 500*500 的图片,就是上面 qrc 中包含的那个 png,

pix = pix.scaled(width*2, height*2, Qt::KeepAspectRatio);
painter.drawPixmap(70, 70, 200, 100, pix);

执行上面两句后,图片在 200*100 的矩形中并没有保持宽高比,请问是怎么回事呢?
实际上,我尝试了 IgnoreAspectRatio, KeepAspectRatio, KeepAspectRatioByExpanding 三个参数,得到的结果都是图片填充满上面那个 200*100 的矩形。
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2016-3-5 16:49:17 显示全部楼层
a35566 发表于 2016-3-4 13:16
谢谢,可行。
现在有个问题,在 QPixmap::scaled 中,Qt::KeepAspectRatio 参数是在 QPainter 所绘制的矩 ...

你的图片很大的话,建议这样用:

QPainter painter(this);
    QPixmap pix;
    pix.load("123.png");
    pix = pix.scaled(100,100,Qt::KeepAspectRatio);
    painter.drawRect(0,0,100,100);
    painter.drawPixmap(0,0,pix);
回复 支持 反对

使用道具 举报

累计签到:16 天
连续签到:1 天
2016-3-10 09:27:59 显示全部楼层
本帖最后由 a35566 于 2016-3-10 09:40 编辑
yafeilinux 发表于 2016-3-5 16:49
你的图片很大的话,建议这样用:

QPainter painter(this);

并不能达到我希望的效果,按照文档里头来看 Qt::KeepAspectRatio 应该是让图片在给定的矩形中按照原本的宽高比进行显示,而不是拉伸填充,然而实现起来却和文档描述的不一样。

我试着把图片缩放成 200*200,让其在 200*300 的画布中显示,还是会拉伸填充……
回复 支持 反对

使用道具 举报

尚未签到

2016-3-15 10:34:08 显示全部楼层
我也想了解,请大家都说说
回复 支持 反对

使用道具 举报

累计签到:6 天
连续签到:1 天
2016-7-24 19:37:21 显示全部楼层
painter.translate(64, 33); //让图片的中心作为旋转的中心painter.rotate(90); //顺时针旋转90度painter.translate(-64,-33); //使原点复原painter.drawPixmap(100, 100, 129, 66, pix);
我觉得这段代码有点问题。
以图片为中心旋转后,再translate(-64,-33),并没有使原点复原,因为新的坐标系已经旋转了90°了。
应该是translate(33,-64),和移动、旋转动作之前的坐标原点一致吧
回复 支持 反对

使用道具 举报

累计签到:7 天
连续签到:1 天
2016-8-13 17:12:07 显示全部楼层
运行之后,不显示图片。
相对路径 绝对路径 是怎么一回事???
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-10-18 14:42:49 显示全部楼层
tuqiao820 发表于 2013-6-23 22:42
遇到一点小问题,我在creator里面debug程序时,能够显示绘制的图片,但是我到debug目录下双击运行painter_2 ...

需要配置path的环境变量
回复 支持 反对

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-2-11 09:24:21 显示全部楼层
好东西,多谢楼主啊,哈哈哈哈
回复 支持 反对

使用道具 举报

累计签到:29 天
连续签到:1 天
2017-7-31 17:14:13 显示全部楼层
使用Qt5.8版本编译器发现一个问题,一开始按照教程发现使用相对路径图片没有显示,使用绝对路径有显示,最后将编译器关闭重新开启后相对路径又可以正常显示了
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2017-7-31 23:14:19 显示全部楼层
月羽 发表于 2017-7-31 17:14
使用Qt5.8版本编译器发现一个问题,一开始按照教程发现使用相对路径图片没有显示,使用绝对路径有显示,最 ...

恩。没有见过类似问题。
回复 支持 反对

使用道具 举报

累计签到:29 天
连续签到:1 天
2017-8-1 08:26:29 显示全部楼层
yafeilinux 发表于 2017-7-31 23:14
恩。没有见过类似问题。

是的老师,这个问题是很奇怪,一开始我也没考虑到编译器问题,所以直接将代码复制过来也一样出错,自己去网络上查询了也没有发现过这个问题,然后又将图片复制到项目的每一个目录的文件夹下发现还是无显示,继续查询资料的时候将编译器关闭了,重新开启的时候发现竟然可以正常显示了,所以要是按照老师步骤一步步来结果还是失败的,可以将编译器关闭重新打开或许就没问题了。
回复 支持 反对

使用道具 举报

累计签到:29 天
连续签到:1 天
2017-8-1 14:01:17 显示全部楼层
发现图片经过放大、旋转、扭曲这三种操作会使得图片变得模糊,没有直接显示来的清楚,请问一下老师,有没有办法使得图片经过这三种操作后还能保持原有图片那样清楚呢?
回复 支持 反对

使用道具 举报

累计签到:1568 天
连续签到:1 天
2017-8-7 23:22:26 显示全部楼层
月羽 发表于 2017-8-1 14:01
发现图片经过放大、旋转、扭曲这三种操作会使得图片变得模糊,没有直接显示来的清楚,请问一下老师,有没有 ...

绘制的时候启用防锯齿会好点
回复 支持 反对

使用道具 举报

累计签到:29 天
连续签到:1 天
2017-8-8 08:15:51 显示全部楼层
yafeilinux 发表于 2017-8-7 23:22
绘制的时候启用防锯齿会好点

谢谢老师的回复,刚学QT对于QT拥有的好多功能都不是很了解,主要还是自己接触的太少了,就像这次要不是老师提示我根本不知道还有防锯齿的功能,等下我就去试试看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了