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 画板功能
个人认为如果想做一个功能强大的绘图工具,那么单纯掌握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 画板功能
相关文章推荐
- C# GDI+简单绘图
- c# GDI+简单绘图(一)
- C# GDI+ 简单绘图 (三) 实现仿QQ截图功能
- c# GDI+简单绘图(四):实现仿WINDOWS 画板功能
- c# GDI+简单绘图(四)
- c# GDI+简单绘图(四)
- c# GDI+简单绘图(四):实现仿WINDOWS 画板功能
- C# GDI+ 简单绘图(一)
- c# GDI+简单绘图(一)
- c# GDI+简单绘图
- c# GDI+简单绘图
- c# GDI+简单绘图(二)
- C# GDI+简单绘图演示
- [收藏转载]C# GDI+ 简单绘图(一)
- c# GDI+简单绘图(一)
- c# GDI+简单绘图(二)
- c# GDI+简单绘图(一)
- C# GDI+ 简单绘图
- c# GDI+简单绘图(一)
- c# GDI+简单绘图(一)