您的位置:首页 > 编程语言 > C#

c# GDI+简单绘图(四)

2008-03-30 01:22 302 查看
  前几篇我已经向大家介绍了如何使用GDI+来绘图,并做了一个截图的实例,这篇我向大家介绍下如何来做一个类似windows画图的工具.

  个人认为如果想做一个功能强大的绘图工具,那么单纯掌握GDI还远远不够,我的目前也只能做一个比较简单的绘图工具了.不足之处,欢迎大家讨论!

  先来看一下最终效果吧:

private void openPic_Click(object sender, EventArgs e)

private bool bReSize = false;//是否改变画布大小

private void reSize_MouseDown(object sender, MouseEventArgs e)

private void reSize_MouseMove(object sender, MouseEventArgs e)

private void reSize_MouseUp(object sender, MouseEventArgs e)

{

bReSize = false;//大小改变结束

//调节大小可能造成画板大小超过屏幕区域,所以事先要设置autoScroll为true.

//但是滚动条的出现反而增加了我们的难度,因为滚动条上下移动并不会自动帮我们调整图片的坐标。

//这是因为GDI绘图的坐标系不只一个,好像有三个,没有仔细了解,一个是屏幕坐标,一个是客户区坐标,还个是文档坐标。

//滚动条的上下移动改变的是文档的坐标,但是客户区坐标不变,而location属性就属于客户区坐标,所以我们直接计算会出现错误

//这时我们就需要知道文档坐标与客户区坐标的偏移量,这就是AutoScrollPostion可以提供的

pbImg.Size = new Size(reSize.Location.X - (this.panel2.AutoScrollPosition.X), reSize.Location.Y - (this.panel2.AutoScrollPosition.Y));

dt.DrawTools_Graphics = pbImg.CreateGraphics();//因为画板的大小被改变所以必须重新赋值

//另外画布也被改变所以也要重新赋值

Bitmap bmp = new Bitmap(pbImg.Width, pbImg.Height);

Graphics g = Graphics.FromImage(bmp);

g.FillRectangle(new SolidBrush(Color.White), 0, 0, pbImg.Width, pbImg.Height);

g.DrawImage(dt.OrginalImg, 0, 0);

g.Dispose();

g = pbImg.CreateGraphics();

g.DrawImage(bmp, 0, 0);

g.Dispose();

dt.OrginalImg = bmp;

bmp.Dispose();

}
  效果如下图(仔细看白色区域的右下角):

  


  此时就可以通过拖动那个小方块来调节图片大小了。

  

  这样,主要的问题差不多已经解决了,但还是有不足这处,欢迎大家提出宝贵的意见。

  绘图工程

其它相关链接:

c# GDI+简单绘图(一):介绍GDI+ 基础知识

c# GDI+简单绘图(二):介绍GDI+绘图知识

c# GDI+简单绘图(三):实现仿QQ截图功能

c# GDI+简单绘图(四): 实现仿WINDOWS 画板功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: