• 9118阅读
  • 10回复

请教:QMatrix缩放影响边框的粗细和颜色深浅 [复制链接]

上一主题 下一主题
离线dxwang
 

只看楼主 正序阅读 楼主  发表于: 2009-11-25
大家好,请教一下:使用QMatrix或者QPainter进行Scale缩放的时候,会影响外围边框的粗细和颜色深浅,希望保持最初始的粗细和颜色深浅,有好的方法解决吗。
painter.save();
painter.scale(0.5, 0.5); 缩放
painter.setPen(QPen(Qt::black, 3)); // 设置画笔的大小,依然达不到效果。猜想是画笔大小也被应用了worldMatrix 变换了。
painter.drawPath(QPainter Pathshape); 以默认画笔绘制路径
painter.restore();

每执行一次上面的代码,线宽就缩小一半,颜色也变浅。同样如何放大的话,线宽变粗,颜色变深。
我学习了一下GDI+的缩放部分:
Matrix matrix;
Matrix.Rotate(30.0f);//旋转顺时针30度
Matrix.Scale(0.5f,0.5f) 缩小一半
Path.Transform(&matrix);//应用变形
g.DrawPath(&Pen(Color(255,0,0,0),3),&path);  
其DrawPath函数可以设置绘制的画笔的宽度。因此我也在上面QT代码中添加了设置画笔大小的语句,达不到效果。另外也尝试用了painter.setWorldMatrixEnabled(0/1)来取消变换矩阵对画笔大小的影响,也没有达到效果。 现在我猜想是不是利用当前的变换矩阵来反推画笔应该有的大小,但是这样会不会导致画笔大小显示的混乱。

请问大家,谁有好的解决方法,非常感谢!
每天进步一点点
离线wbyqy

只看该作者 10楼 发表于: 2009-12-10
顶。。。。。。
[ 此帖被wbyqy在2009-12-10 21:49重新编辑 ]
离线tieqilin
只看该作者 9楼 发表于: 2009-12-07
void QPen::setCosmetic ( bool cosmetic )
离线zhgn

只看该作者 8楼 发表于: 2009-12-07
正好需要,学习了
离线dxwang

只看该作者 7楼 发表于: 2009-12-07
谢谢,解决啦
每天进步一点点
离线zhangxudong

只看该作者 6楼 发表于: 2009-11-26
看看void QPen::setCosmetic ( bool cosmetic )
离线dxwang

只看该作者 5楼 发表于: 2009-11-25
我用的是QT4.2.3 不知道最新版的是不是也这样
每天进步一点点
离线dxwang

只看该作者 4楼 发表于: 2009-11-25
我现在是取出worldMatrix 的m22,然后penwidthF=original/m22, 可以解决缩放的时候线宽的颜色的变化。但是一旦旋转后,旋转的信息又复加到m22上了,这样计算出来的画笔大小又不对了,唉。 我现在想 如何我单独记忆一个缩放的矩阵,然后再对比这个worldMatrix ,用这两个矩阵能不能准确算出原始的画笔大小呢,不知道怎么算,谁能提示。
每天进步一点点
离线yb824
只看该作者 3楼 发表于: 2009-11-25
或许drawPath实际使用的pen大小就是计算过的。不清楚,帮顶~~~
离线dxwang

只看该作者 2楼 发表于: 2009-11-25
不知道GDI+的DrawPath(&Pen(Color(255,0,0,0),3),&path);是如何处理这个画笔宽度 使之缩放前后没有任何变化,望大家指点,谢谢!
每天进步一点点
离线dxwang

只看该作者 1楼 发表于: 2009-11-25
另外我也尝试过把painter.drawPath(QPainter Pathshape); 放到painter.restore()后面执行,但是这样的话,绘制出来的外框就是原来的外框,不是贴着缩小边界的外框了,也就是说绘制的路径是缩放之前的路径,呵呵。
每天进步一点点
快速回复
限100 字节
 
上一个 下一个