C# GDI+绘制的矢量图,如何实现图形的放大、缩小、移动功能? C# GDI+绘图,比方说,画了一个矩形,如何放大、缩小、移动这个矩形?能否给个详细的代码例子? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个很简单啊!RectangleF recF =new RectangleF(X,Y,Width,Height);//你最初的矩形recF.Inflate(2,2);//将这个矩形长和宽放大2个单位recF.Inflate(-2,-2);//将这个矩形长和宽缩小2个单位移动有一点点麻烦,但也很简单假设记得Graphics对象是drawG; drawG.TranslateTransform(50,50);//移动就这么简单,呵呵!这是把X,Y坐标都移动了50个单位, 如果你想平移就把Y写成0,依此类推,它的移动原则好比数学里向量。 drawG.DrawRectangle(pens.black,recF.X,recF.Y,recF.width,recF.height);注意啦,移动完这个,你还要做点事,不然的话,你在此矩形后面画出来的东西全这样移动了,除非你想这样不然的话,你得还原,再继续画其他的东西,一般来说,都是需要还愿的,除非你有这个需求。以下是还原:drawG.ResetTransform();虽然只有3行代码,但也许你会觉得使用起来很不方便,如果我们能记下要移动的坐标,并保存好,下次我只要想移动就调用,多好啊,事实上可以这样的,而且一般我们都会这样去做。Graphics drawG =e.Graphics;drawG.TranslateTransform(50,50); //不做解释GraphicsState transState1 = drawG.Save(); //保存现在的移动,你可以创建多个这样的保存drawG.ResetTransform(); //每次我们都应该这样去做,还原它,这样后面的要画的东西的坐标才不会乱现在来画它了,你会很轻松的得到两个一样大的矩形,且一个矩形是另一个移动以后的。drawG.DrawRectangle(pens.black,recF.X,recF.Y,recF.width,recF.height); //原始的-----------------------------drawG.Restore(transState1);//获得移动的向量drawG.DrawRectangle(pens.black,recF.X,recF.Y,recF.width,recF.height); //去瞧瞧,它移动了。 放大可以用Graphics的ScaleTransform实现,它放大是相当于用放大镜也可以把要绘制的矩形变大再画,比如原来是(10, 10) - (100, 100),放大为2倍后就是(20, 20) - (200 - 200)这样画的时候只是矩形大了,但线条不会变,如果不手动改变画笔粗细的话移动就是把坐标变一下,比如原来是(10, 10) - (100, 100),向右移10,就变成了(20, 10) - (110, 100),移动之后再画就可以了 用ScaleTransform方法ScaleTransform(float sx,float sy)sx表示x方向的缩放比例,sy表示y方向的缩放比例 急!C# 串口编程 析构函数怎样用户触发的问题 GDI+ 请教如何判断字符串中是否包含某个字符?如"adfas=dfdsa"是否包含=号 BOOL与BOOLEAN的使用区别在哪? 请教:用OleDbCommand更新Access数据库的问题 从0开始,第6问? 关于自制控件设计中移动时变色问题 C#无法绑定到 DataSource 的属性或列 BookName。 参数名: dataMember VS2015打开2012程序出现这个问题,求解怎么处理 winform 中的notifyIcon控件怎样显示气泡? TextEditorControl的问题
RectangleF recF =new RectangleF(X,Y,Width,Height);//你最初的矩形
recF.Inflate(2,2);//将这个矩形长和宽放大2个单位
recF.Inflate(-2,-2);//将这个矩形长和宽缩小2个单位
移动有一点点麻烦,但也很简单
假设记得Graphics对象是drawG;
drawG.TranslateTransform(50,50);//移动就这么简单,呵呵!这是把X,Y坐标都移动了50个单位,
如果你想平移就把Y写成0,依此类推,它的移动原则好比数学里向量。
drawG.DrawRectangle(pens.black,recF.X,recF.Y,recF.width,recF.height);
注意啦,移动完这个,你还要做点事,不然的话,你在此矩形后面画出来的东西全这样移动了,除非你想这样
不然的话,你得还原,再继续画其他的东西,一般来说,都是需要还愿的,除非你有这个需求。
以下是还原:
drawG.ResetTransform();虽然只有3行代码,但也许你会觉得使用起来很不方便,如果我们能记下要移动的坐标,并保存好,下次
我只要想移动就调用,多好啊,事实上可以这样的,而且一般我们都会这样去做。
Graphics drawG =e.Graphics;
drawG.TranslateTransform(50,50); //不做解释
GraphicsState transState1 = drawG.Save(); //保存现在的移动,你可以创建多个这样的保存
drawG.ResetTransform(); //每次我们都应该这样去做,还原它,这样后面的要画的东西的坐标才不会乱现在来画它了,你会很轻松的得到两个一样大的矩形,且一个矩形是另一个移动以后的。
drawG.DrawRectangle(pens.black,recF.X,recF.Y,recF.width,recF.height); //原始的
-----------------------------
drawG.Restore(transState1);//获得移动的向量
drawG.DrawRectangle(pens.black,recF.X,recF.Y,recF.width,recF.height); //去瞧瞧,它移动了。
ScaleTransform(float sx,float sy)
sx表示x方向的缩放比例,sy表示y方向的缩放比例