C# GDI+绘图,比方说,画了一个矩形,如何放大、缩小、移动这个矩形?能否给个详细的代码例子?

解决方案 »

  1.   

    这个很简单啊!
    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);  //去瞧瞧,它移动了。
                                  
      

  2.   

    放大可以用Graphics的ScaleTransform实现,它放大是相当于用放大镜也可以把要绘制的矩形变大再画,比如原来是(10, 10) - (100, 100),放大为2倍后就是(20, 20) - (200 - 200)这样画的时候只是矩形大了,但线条不会变,如果不手动改变画笔粗细的话移动就是把坐标变一下,比如原来是(10, 10) - (100, 100),向右移10,就变成了(20, 10) - (110, 100),移动之后再画就可以了
      

  3.   

    用ScaleTransform方法
    ScaleTransform(float sx,float sy)
    sx表示x方向的缩放比例,sy表示y方向的缩放比例