Windows Mobile 5 编程体验4

今天做一个在windows mobile中画图,并保存到模拟器文件夹下的例子。ok新建一个项目,添加一个窗体。界面设计如下,在屏幕的中间我放了一个图片框。

  

要画图,肯定要用到鼠标事件,具体用到哪些呢,应该是Mouse_Down,Mouse_Move,Mouse_Up。首先当鼠标按下时,我们创建一个点的list数组。当鼠标移动的时候我们就往这个list数组里面添加点。在高中我们就学过点成线,线成面。废话不多说,看看程序。

 
 
  1. using System;  
  2. using System.Linq;  
  3. using System.Collections.Generic;  
  4. using System.ComponentModel;  
  5. using System.Data;  
  6. using System.Drawing;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9.  
  10. namespace SmartDeviceProject1  
  11. {  
  12.     public partial class Form1 : Form  
  13.     {  
  14.         public Form1()  
  15.         {  
  16.             InitializeComponent();  
  17.         }  
  18.         List<Point> listPoint = null;  
  19.         List<List<Point>> lineList = new List<List<Point>>();  
  20.         /// <summary>  
  21.         /// 画笔按下  
  22.         /// </summary>  
  23.         /// <param name="sender"></param>  
  24.         /// <param name="e"></param>  
  25.         private void pictureBox1_MouseDown(object sender, MouseEventArgs e)  
  26.         {  
  27.  
  28.             listPoint = new List<Point>(); //创建点的集合  
  29.         }  
  30.  
  31.  
  32.         /// <summary>  
  33.         /// 画笔移动  
  34.         /// </summary>  
  35.         /// <param name="sender"></param>  
  36.         /// <param name="e"></param>  
  37.         private void pictureBox1_MouseMove(object sender, MouseEventArgs e)  
  38.         {  
  39.             this.AddPoint(e.X, e.Y);  
  40.         }  
  41.  
  42.  
  43.         /// <summary>  
  44.         /// 添加点  
  45.         /// </summary>  
  46.         /// <param name="pointX"></param>  
  47.         /// <param name="pointY"></param>  
  48.         private void AddPoint(int pointX,int pointY)  
  49.         {  
  50.             listPoint.Add(new Point(pointX, pointY));  
  51.             int pointCount = listPoint.Count;  
  52.             if (pointCount > 1)  
  53.             {  
  54.                 Graphics gp = pictureBox1.CreateGraphics();  
  55.                 Pen pen = new Pen(Color.Red);  
  56.                 gp.DrawLine(pen, listPoint[pointCount - 2].X, listPoint[pointCount - 2].Y,listPoint[pointCount-1].X,listPoint[pointCount-1].Y);  
  57.                 gp.Dispose();  
  58.                 pen.Dispose();  
  59.             }  
  60.         }  
  61.  
  62.         /// <summary>  
  63.         ///  画笔抬起  
  64.         /// </summary>  
  65.         /// <param name="sender"></param>  
  66.         /// <param name="e"></param>  
  67.         private void pictureBox1_MouseUp(object sender, MouseEventArgs e)  
  68.         {  
  69.             this.AddPoint(e.X,e.Y);  
  70.             lineList.Add(listPoint);//将所有的线条添加进来  
  71.         }  
  72.  
  73.  
  74.         /// <summary>  
  75.         /// 绘制线条  
  76.         /// </summary>  
  77.         private void DrawLines(Graphics gp)  
  78.         {  
  79.             Pen pen = new Pen(Color.Red);  
  80.             int lineCount = lineList.Count;  
  81.             foreach (List<Point> point in lineList)  
  82.             {  
  83.                 gp.DrawLine(pen,point[0].X,point[0].Y,point[1].X,point[1].Y);  
  84.             }  
  85.             pen.Dispose();  
  86.         }  
  87.  
  88.  
  89.         //保存图片  
  90.         private void button1_Click(object sender, EventArgs e)  
  91.         {  
  92.             try 
  93.             {  
  94.                 saveFileDialog1.Filter = "Jpg图片|*.jpg|Gif图片|*.gif|BMP图片|*.bmp|PNG图片|*.png|图片|*.jpg;*.gif;*.bmp;*.png";  
  95.                 saveFileDialog1.FilterIndex =1;  
  96.                 if (saveFileDialog1.ShowDialog() == DialogResult.OK)  
  97.                 {  
  98.                     if (lineList.Count > 0)  
  99.                     {  
  100.                         Bitmap bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);  
  101.                         Graphics gp = Graphics.FromImage(bmp);  
  102.                         Brush brush = new SolidBrush(Color.White);  
  103.                         gp.FillRectangle(brush, pictureBox1.ClientRectangle);  
  104.                         this.DrawLines(gp);  
  105.                         bmp.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);  
  106.                         bmp.Dispose();  
  107.                         gp.Dispose();  
  108.                         brush.Dispose();  
  109.                     }  
  110.                     else 
  111.                     {  
  112.                         MessageBox.Show("你还没有绘图,请绘图""提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button1);  
  113.                     }  
  114.                 }  
  115.             }  
  116.             catch(Exception m)  
  117.             {  
  118.                 MessageBox.Show("保存图片失败,原因:"+m.Message);  
  119.             }  
  120.             finally   
  121.             {  
  122.                 lineList.Clear(); //保存完毕,清除所有线条  
  123.             }  
  124.         }  
  125.  
  126.  
  127.         /// <summary>  
  128.         /// 清除绘制的图形  
  129.         /// </summary>  
  130.         /// <param name="sender"></param>  
  131.         /// <param name="e"></param>  
  132.         private void button2_Click(object sender, EventArgs e)  
  133.         {  
  134.             lineList.Clear();  
  135.             pictureBox1.Invalidate();  
  136.         }  
  137.     }  

看看效果

点击保存,弹出保存框,如下

 

点击保存,完成图片的保存,然后我们去资源管理器看看有没有

 

保存成功,就是这么简单。



本文转自 BruceAndLee 51CTO博客,原文链接:http://blog.51cto.com/leelei/384688,如需转载请自行联系原作者


  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值