实例介绍
【实例简介】
【实例截图】
【核心代码】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.IO;
using System.Drawing.Imaging;
namespace 尚海涵的小画笔
{
public partial class Form1 : Form
{
//定义list泛型集合对象,保存所有图元
private List<Shape> _listShape = new List<Shape>();
//定义List泛型集合对象,用于保存被撤销的图元
private List<Shape> _listTempShape = new List<Shape>();
//保存当前绘制的临时直线
private Shape _tempShape = null;
//保存当前的绘制类型(默认为直线)
private DrawType _drawType = DrawType.Line;
//保存bufferdGraphicsContext对象,该对象用来单独分配和管理图形缓冲区
BufferedGraphicsContext _bufGraphCont = null;
//保存BufferedGraphics(图形缓冲区)对象
BufferedGraphics _bufGraph = null;
//保存当前绘制的线宽为(默认为10)
private int _drawWidth = 10;
//保存颜色
private Color _drawColor = Color.Red;
//保存当前图形的文件名(默认为空)
private string _fileName = "";
//是否需要保存的标记(如果为true,表示需要弹出保存对话框)
private Boolean _saveFlag = false;
//保存图形缩放比例(默认为1)
private double _zoomRatio = 1;
//保存PanelDraw窗口的初始尺寸
private Size _panelDrawInitSize = new Size(0, 0);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//获取当前应用程序的BuferedGraphicsContext对象
_bufGraphCont = BufferedGraphicsManager.Current;
//使用于this的相同的像素格式
_bufGraph = _bufGraphCont.Allocate(this.CreateGraphics(), this.ClientRectangle);
//使用于this.createGraphics()相同的像素格式来创建指定大小的图像缓冲区
_bufGraph = _bufGraphCont.Allocate(this.CreateGraphics(),this.ClientRectangle);
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//设置抗锯齿平衡模式
_bufGraph.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
//保存panelDraw窗口的初始尺寸
_panelDrawInitSize.Width = panelDraw.Width;
_panelDrawInitSize.Height = panelDraw.Height;
//禁用menuitemUndo菜单
MenuItemUndo.Enabled = false;
toolStripButtonUndo.Enabled = false;
//禁用menuitemUndo菜单
MenuItemRedo.Enabled = false;
toolStripButtonRedo.Enabled = false;
//以“pencil.ur”
Cursor penCur = new Cursor("pencil.cur");
this.Cursor = penCur;
//把菜单条,工具条,状态条的光标设置为默认的箭头光标
menuStrip1.Cursor = Cursors.Arrow;
toolStrip1.Cursor = Cursors.Arrow;
statusStrip1.Cursor = Cursors.Arrow;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (_drawType != DrawType.Stop)
{
if (_drawType == DrawType.Line)
{
_tempShape = new Line();
((Line)_tempShape)._P1 = new Point(e.X, e.Y);
}
//***************************************
else if (_drawType == DrawType.Rectangle)
{
_tempShape = new Rectangle();
((Rectangle)_tempShape)._P1 = new Point(e.X, e.Y);
}
//***************************************
else if (_drawType == DrawType.Rectangle)
{
_tempShape = new Rectangle();
((Rectangle)_tempShape)._P1 = new Point(e.X, e.Y);
}
//**********************************************
else if (_drawType == DrawType.Circle)
{
_tempShape = new Circle();
((Circle)_tempShape)._PCenter = new Point(e.X, e.Y);
}
else if (_drawType == DrawType.Sketch)
{
_tempShape = new Sketch();
((Sketch)_tempShape)._PointList.Add(new Point(e.X, e.Y));
}
//保存画笔线宽和颜色到临时图元(_tempShape中)
_tempShape._PenWidth = _drawWidth;
_tempShape._PenColor = _drawColor;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (_drawType != DrawType.Stop)
{
if (_drawType == DrawType.Line)
((Line)_tempShape)._P2 = new Point(e.X,e.Y);
//***************************************
else if (_drawType == DrawType.Rectangle)
((Rectangle)_tempShape)._P2 = new Point(e.X, e.Y);
//***************************************
else if (_drawType == DrawType.Circle)
((Circle)_tempShape)._R = (float)Math.Sqrt(Math.Pow((e.X-((Circle)_tempShape)._PCenter.X),2)
Math.Pow((e.Y-((Circle)_tempShape)._PCenter.Y),2));
else if(_drawType == DrawType.Sketch)
((Sketch)_tempShape)._PointList.Add(new Point(e.X, e.Y));
//将改图元添加到_listShape集合中
_listShape.Add(_tempShape);
//设置保存标记为true
_saveFlag = true;
//清空
_listTempShape.Clear();
//禁止
MenuItemRedo.Enabled = false;
toolStripButtonRedo.Enabled = false;
//启用MenuItemUndo菜单
MenuItemUndo.Enabled = true;
toolStripButtonUndo.Enabled = true;
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制所有图元到图形缓冲区
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics,DashStyle.Solid,_zoomRatio);
//将图形缓冲区的图元绘制到当前窗口
_bufGraph.Render(this.CreateGraphics());
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制所有图元到圆形缓冲区
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics,DashStyle.Solid,_zoomRatio);
//将图形缓冲区的图元绘制到当前窗口
_bufGraph.Render(this.CreateGraphics());
}
private void MenuItemLine_Click(object sender, EventArgs e)
{
_drawType = DrawType.Line;
}
private void MenuItemRectangle_Click(object sender, EventArgs e)
{
_drawType = DrawType.Rectangle;
}
private void MenuItemCircle_Click(object sender, EventArgs e)
{
_drawType = DrawType.Circle;
}
private void MenuItemStop_Click(object sender, EventArgs e)
{
_drawType = DrawType.Stop;
}
private void MenuItemDrawing_Click(object sender, EventArgs e)
{
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
//判断鼠标左键是否处于下压状态
if (e.Button == MouseButtons.Left)
{
if (_drawType != DrawType.Stop)
{
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制所有图元到图形缓冲区
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics, DashStyle.Solid,_zoomRatio);
//根据绘图类型,保存相应的信息到临时图元(_tempShape)中
if (_drawType == DrawType.Line)
((Line)_tempShape)._P2 = e.Location;
else if (_drawType == DrawType.Rectangle)
((Rectangle)_tempShape)._P2 = e.Location;
else if (_drawType == DrawType.Circle)
((Circle)_tempShape)._R = (float)Math.Sqrt(Math.Pow((e.X - ((Circle)_tempShape)._PCenter.X), 2)
Math.Pow((e.Y - ((Circle)_tempShape)._PCenter.Y), 2));
else if (_drawType == DrawType.Sketch)
((Sketch)_tempShape)._PointList.Add(e.Location);
}
//绘制当前的临时图元(_tempShape)到图形缓冲区
_tempShape.Draw(_bufGraph.Graphics,DashStyle.Dash,_zoomRatio);
//将图形缓冲区的图元绘制到当前窗口
_bufGraph.Render(this.CreateGraphics());
}
//显示鼠标的坐标
StatusLabelMousePosition.Text = "鼠标:x=" e.X ",y=" e.Y;
}
private void MenuItemWidth_Click(object sender, EventArgs e)
{
//新建一个线宽对话框对象
DlgPenWidth dlgPenWidth = new DlgPenWidth();
//设置线宽对话框默认显示的线宽值
dlgPenWidth.numericUpDownWidth.Value = _drawWidth;
//显示线宽对话框,判断是否电击了ok按钮
if (dlgPenWidth.ShowDialog(this) == DialogResult.OK)
{
//保存用户设置的线宽到_drawWidth
_drawWidth = (int)(dlgPenWidth.numericUpDownWidth.Value);
}
}
private void MenuItemColor_Click(object sender, EventArgs e)
{
//设置颜色对话框为默认选中的颜色
colorDialog1.Color = _drawColor;
//显示颜色对话框,判断是否点击了ok按钮
if (colorDialog1.ShowDialog(this) == DialogResult.OK)
{
//保存用户设置的颜色到_drawColor
_drawColor = colorDialog1.Color;
}
}
private void MenuItemUndo_Click(object sender, EventArgs e)
{
if (_listShape.Count != 0)
{
//在删除之前,先把_listShape中的最后一个图元保存到_listTempShape
_listTempShape.Add(_listShape[_listShape.Count-1]);
//删除_listShape中的最后一个图元
_listShape.RemoveAt(_listShape.Count - 1);
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制所有图元到图形缓冲区
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics, DashStyle.Solid,_zoomRatio);
//将图形缓冲区的内容绘制到主窗口
_bufGraph.Render(panelDraw.CreateGraphics());
//判断是否需要禁用MenuItemUndo菜单
if (_listShape.Count == 0)
{
MenuItemUndo.Enabled = false;
toolStripButtonUndo.Enabled = false;
}
//启用MenuItemRedo菜单
MenuItemRedo.Enabled = true;
toolStripButtonRedo.Enabled = true;
_saveFlag = true;
}
}
private void MenuItemRedo_Click(object sender, EventArgs e)
{
//判断_listTempShape中是否有图元
if(_listTempShape.Count!=0)
{
_listShape.Add(_listTempShape[_listTempShape.Count - 1]);
//删除_listTempShape中的最后一个图元
_listTempShape.RemoveAt(_listTempShape.Count - 1);
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制所有图元到图形缓冲区
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics, DashStyle.Solid,_zoomRatio);
//将图形缓冲区的图元绘制到当前窗口
_bufGraph.Render(panelDraw.CreateGraphics());
//判断是否需要禁用MenuItemUndo菜单
if (_listTempShape.Count == 0)
{
MenuItemRedo.Enabled = false;
toolStripButtonRedo.Enabled = false;
}
//启用MenuItemRedo菜单
MenuItemUndo.Enabled = true;
toolStripButtonUndo.Enabled = true;
_saveFlag = true;
}
}
private void ToolStripMenuItem1px_Click(object sender, EventArgs e)
{
_drawWidth = 1;
}
private void ToolStripMenuItem2px_Click(object sender, EventArgs e)
{
_drawWidth = 2;
}
private void ToolStripMenuItem4px_Click(object sender, EventArgs e)
{
_drawWidth = 4;
}
private void ToolStripMenuItem8px_Click(object sender, EventArgs e)
{
_drawWidth = 8;
}
private void ToolStripMenuItemRed_Click(object sender, EventArgs e)
{
_drawColor = Color.Red;
}
private void ToolStripMenuItemGreen_Click(object sender, EventArgs e)
{
_drawColor = Color.Green;
}
private void ToolStripMenuItemBlue_Click(object sender, EventArgs e)
{
_drawColor = Color.Blue;
}
private void ToolStripMenuItemYellow_Click(object sender, EventArgs e)
{
_drawColor = Color.Yellow;
}
private void ToolStripMenuItemBlack_Click(object sender, EventArgs e)
{
_drawColor = Color.Black;
}
private void MenuItemNew_Click(object sender, EventArgs e)
{
if (_saveFlag == true)
{
if (MessageBox.Show("图形已经改变啦,您需要保存吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
MenuItemSave_Click(null, null);
}
//清空图元
_listShape.Clear();
_listTempShape.Clear();
//清空缓冲区
_bufGraph.Graphics.Clear(Color.White);
_bufGraph.Render(this.CreateGraphics());
//清空当前图形的文件名
_fileName = "";
this.Text = "画笔--无标题";
//禁用按钮
_saveFlag = false;
MenuItemUndo.Enabled = false;
toolStripButtonUndo.Enabled = false;
MenuItemRedo.Enabled = false;
toolStripButtonRedo.Enabled = false;
}
private void MenuItemSaveAs_Click(object sender, EventArgs e)
{
//显示文件保存对话框,设置另存的文件名
if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)
{
//保存用户设置的文件名
_fileName = saveFileDialog1.FileName;
this.Text = "画笔" _fileName;
//创建一个文件流对象,用于写入图形信息
FileStream fs = new FileStream(_fileName, FileMode.Create);
//创建一个与文件流对象相应的二进制写入流对象
BinaryWriter bw = new BinaryWriter(fs);
//把图元数量写入到文件
bw.Write(_listShape.Count);
//逐一把图元信息写入到文件
foreach (Shape tempShape in _listShape)
{
//把图元类型
bw.Write(tempShape.GetType().ToString());
//把图元信息写入到文件中
tempShape.Write(bw);
}
//关闭有关文件流对象
bw.Close();
fs.Close();
_saveFlag = false;
}
}
private void MenuItemOpen_Click(object sender, EventArgs e)
{
//调用菜单‘新建’
MenuItemNew_Click(null, null);
//显示文件打开对话框
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
//保存用户选择的文件名
_fileName = openFileDialog1.FileName;
this.Text = "画笔" _fileName;
//创建一个文件流对象,读出
FileStream fs = new FileStream(_fileName, FileMode.Open, FileAccess.Read);
//创建一个与文件流对象相对应的二进制读入对象
BinaryReader br = new BinaryReader(fs);
//在文件中读取图元数量
int shapeCount = br.ReadInt32();
//逐一从文件中读取图元信息
for (int i = 0; i < shapeCount; i )
{
//从文件中读取
string ShapeType = br.ReadString();
//如果是直线
if (ShapeType == "尚海涵的小画笔.Line")
{
Line shape = new Line();
shape.Read(br);
_listShape.Add(shape);
}
else if (ShapeType == "尚海涵的小画笔.Rectangle")
{
Rectangle shape = new Rectangle();
shape.Read(br);
_listShape.Add(shape);
}
else if (ShapeType == "尚海涵的小画笔.Circle")
{
Circle shape = new Circle();
shape.Read(br);
_listShape.Add(shape);
}
else if (ShapeType == "尚海涵的小画笔.Sketch")
{
Sketch shape = new Sketch();
shape.Read(br);
_listShape.Add(shape);
}
else
//弹出信息提示框
MessageBox.Show("图元类型错误。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
//关闭有关文件对象
br.Close();
fs.Close();
_saveFlag = false;
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制所有图形到图形缓冲区
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics, DashStyle.Solid,_zoomRatio);
//将图形缓冲区的图元绘制到当前窗口
_bufGraph.Render(this.CreateGraphics());
}
}
private void MenuItemSave_Click(object sender, EventArgs e)
{
//如果_fileName为空
if (_fileName == "")
{
//显示文件保存对话框
if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)
{
//保存用户选择的文件名
_fileName = saveFileDialog1.FileName;
//设置窗口颜色
this.Text = "画笔" _fileName;
}
else
return;
}
//创建一个文件流对象,
FileStream fs = new FileStream(_fileName,FileMode.Create);
//创建一个与文件流对相应的二进制写入刘对象
BinaryWriter bw = new BinaryWriter(fs);
//把图元数量写入到文件中
bw.Write(_listShape.Count);
//逐一把图源信息写入到文件中
foreach (Shape tempShape in _listShape)
{
bw.Write(tempShape.GetType().ToString());
tempShape.Write(bw);
}
//关闭
bw.Close();
fs.Close();
_saveFlag = false;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (_saveFlag == true)
{
if (MessageBox.Show("图形已经改变啦,您需要保存吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
MenuItemSave_Click(null, null);
}
}
private void MenuItemclose_Click(object sender, EventArgs e)
{
this.Close();
}
private void MenuItemSaveAsPic_Click(object sender, EventArgs e)
{
if (saveFileDialog2.ShowDialog(this) == DialogResult.OK)
{
//创建一个位图对象,其尺寸与窗口尺寸适应
Bitmap bitmap = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
//获取位图的Graphics的对象
Graphics gBitmap = Graphics.FromImage(bitmap);
//把图像缓冲区写入到位图的Graphics对象
_bufGraph.Render(gBitmap);
//获取图片文件的后缀名
string extension = System.IO.Path.GetExtension(saveFileDialog2.FileName);
//根据后缀名 ,存储为相对应的格式
if (extension == ".jpg")
bitmap.Save(saveFileDialog2.FileName, ImageFormat.Jpeg);
else if (extension == ".gif")
bitmap.Save(saveFileDialog2.FileName, ImageFormat.Gif);
else if (extension == ".bmp")
bitmap.Save(saveFileDialog2.FileName, ImageFormat.Bmp);
else
MessageBox.Show("对不起,暂时不支持该图片格式。", extension, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void MenuItemSketch_Click(object sender, EventArgs e)
{
_drawType = DrawType.Sketch;
}
private void panelDraw_MouseDown(object sender, MouseEventArgs e)
{
if (_drawType != DrawType.Stop)
{
if (_drawType == DrawType.Line)
{
_tempShape = new Line();
((Line)_tempShape)._P1 = new Point((int)(e.X / _zoomRatio), (int)(e.Y / _zoomRatio));
}
//***************************************
else if (_drawType == DrawType.Rectangle)
{
_tempShape = new Rectangle();
((Rectangle)_tempShape)._P1 = new Point((int)(e.X / _zoomRatio), (int)(e.Y / _zoomRatio));
}
//***************************************
else if (_drawType == DrawType.Rectangle)
{
_tempShape = new Rectangle();
((Rectangle)_tempShape)._P1 = new Point((int)(e.X / _zoomRatio), (int)(e.Y / _zoomRatio));
}
//**********************************************
else if (_drawType == DrawType.Circle)
{
_tempShape = new Circle();
((Circle)_tempShape)._PCenter = new Point((int)(e.X / _zoomRatio), (int)(e.Y / _zoomRatio));
}
else if (_drawType == DrawType.Sketch)
{
_tempShape = new Sketch();
((Sketch)_tempShape)._PointList.Add(new Point((int)(e.X / _zoomRatio), (int)(e.Y / _zoomRatio)));
}
//保存画笔线宽和颜色到临时图元(_tempShape中)
_tempShape._PenWidth = _drawWidth;
_tempShape._PenColor = _drawColor;
}
}
private void panelDraw_MouseMove(object sender, MouseEventArgs e)
{
//判断鼠标左键是否处于下压状态
if (e.Button == MouseButtons.Left)
{
if (_drawType != DrawType.Stop)
{
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制所有图元到图形缓冲区
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics, DashStyle.Solid,_zoomRatio);
//根据绘图类型,保存相应的信息到临时图元(_tempShape)中
if (_drawType == DrawType.Line)
((Line)_tempShape)._P2 = new Point((int)(e.X / _zoomRatio),(int)(e.Y / _zoomRatio));
else if (_drawType == DrawType.Rectangle)
((Rectangle)_tempShape)._P2 = new Point((int)(e.X / _zoomRatio),(int)(e.Y / _zoomRatio));
else if (_drawType == DrawType.Circle)
((Circle)_tempShape)._R = (float)Math.Sqrt(Math.Pow(((int)(e.X/_zoomRatio) - ((Circle)_tempShape)._PCenter.X), 2)
Math.Pow(((int)(e.Y/_zoomRatio) - ((Circle)_tempShape)._PCenter.Y), 2));
else if (_drawType == DrawType.Sketch)
((Sketch)_tempShape)._PointList.Add(new Point((int)(e.X/_zoomRatio),(int)(e.Y/_zoomRatio)));
}
//绘制当前的临时图元(_tempShape)到图形缓冲区
_tempShape.Draw(_bufGraph.Graphics,DashStyle.Dash,_zoomRatio);
//将图形缓冲区的图元绘制到当前窗口
_bufGraph.Render(panelDraw.CreateGraphics());
}
//显示鼠标的坐标
StatusLabelMousePosition.Text = "鼠标:x=" e.X ",y=" e.Y;
}
private void panelDraw_MouseUp(object sender, MouseEventArgs e)
{
if (_drawType != DrawType.Stop)
{
if (_drawType == DrawType.Line)
((Line)_tempShape)._P2 = new Point((int)(e.X / _zoomRatio), (int)(e.Y / _zoomRatio));
//***************************************
else if (_drawType == DrawType.Rectangle)
((Rectangle)_tempShape)._P2 = new Point((int)(e.X / _zoomRatio), (int)(e.Y / _zoomRatio));
//***************************************
else if (_drawType == DrawType.Circle)
((Circle)_tempShape)._R = (float)Math.Sqrt(Math.Pow(((int)(e.X / _zoomRatio) - ((Circle)_tempShape)._PCenter.X), 2)
Math.Pow(((int)(e.Y / _zoomRatio) - ((Circle)_tempShape)._PCenter.Y), 2));
else if (_drawType == DrawType.Sketch)
((Sketch)_tempShape)._PointList.Add(new Point((int)(e.X / _zoomRatio), (int)(e.Y / _zoomRatio)));
//将改图元添加到_listShape集合中
_listShape.Add(_tempShape);
//设置保存标记为true
_saveFlag = true;
//清空
_listTempShape.Clear();
//禁止
MenuItemRedo.Enabled = false;
toolStripButtonRedo.Enabled = false;
//启用MenuItemUndo菜单
MenuItemUndo.Enabled = true;
toolStripButtonUndo.Enabled = true;
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制所有图元到图形缓冲区
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics, DashStyle.Solid, _zoomRatio);
//将图形缓冲区的图元绘制到当前窗口
_bufGraph.Render(panelDraw.CreateGraphics());
}
}
private void panelDraw_Paint(object sender, PaintEventArgs e)
{
//清空图形缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制所有图元到圆形缓冲区
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics, DashStyle.Solid,_zoomRatio);
//将图形缓冲区的图元绘制到当前窗口
_bufGraph.Render(panelDraw.CreateGraphics());
}
private void StripMenuItemZoomIn_Click(object sender, EventArgs e)
{
//保存缩放比例
_zoomRatio = _zoomRatio * 1.1;
//设置panelDraw的宽度和高度
panelDraw.Width = (int)(_panelDrawInitSize.Width * _zoomRatio);
panelDraw.Height = (int)(_panelDrawInitSize.Height * _zoomRatio);
//使用于panelDraw相同的像素格式来创建指定大小的图形缓冲区
_bufGraph = _bufGraphCont.Allocate(panelDraw.CreateGraphics(), panelDraw.ClientRectangle);
//设置抗锯齿平滑模式
_bufGraph.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
//清空缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics, DashStyle.Solid,_zoomRatio);
_bufGraph.Render(panelDraw.CreateGraphics());
}
private void MenuItemZoomOut_Click(object sender, EventArgs e)
{
//保存缩放比例
_zoomRatio = _zoomRatio * 0.9;
//设置panelDraw的宽度和高度
panelDraw.Width = (int)(_panelDrawInitSize.Width * _zoomRatio);
panelDraw.Height = (int)(_panelDrawInitSize.Height * _zoomRatio);
//使用于panelDraw相同的像素格式来创建指定大小的图形缓冲区
_bufGraph = _bufGraphCont.Allocate(panelDraw.CreateGraphics(), panelDraw.ClientRectangle);
//设置抗锯齿平滑模式
_bufGraph.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
//清空缓冲区
_bufGraph.Graphics.Clear(Color.White);
//逐一绘制
foreach (Shape shape in _listShape)
shape.Draw(_bufGraph.Graphics, DashStyle.Solid,_zoomRatio);
_bufGraph.Render(panelDraw.CreateGraphics());
}
private void MenuItemScreenPen_Click(object sender, EventArgs e)
{
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论