CraftSynth.ImageEditor – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 using System;
2 using System.Drawing;
3 using System.Drawing.Imaging;
4 using System.IO;
5 using System.Windows.Forms;
6  
7 namespace CraftSynth.ImageEditor
8 {
9 /// <summary>
10 /// Image tool
11 /// </summary>
12 internal class ToolImage : ToolObject
13 {
14 public ToolImage()
15 {
16 Cursor = new Cursor(GetType(), "Rectangle.cur");
17 }
18  
19 public override void OnMouseDown(DrawArea drawArea, MouseEventArgs e)
20 {
21 Point p = drawArea.BackTrackMouse(new Point(e.X, e.Y));
22 AddNewObject(drawArea, new DrawImage(p.X, p.Y, false));
23 }
24  
25 public override void OnMouseMove(DrawArea drawArea, MouseEventArgs e)
26 {
27 drawArea.Cursor = Cursor;
28  
29 if (e.Button ==
30 MouseButtons.Left)
31 {
32 Point point = drawArea.BackTrackMouse(new Point(e.X, e.Y));
33 int al = drawArea.TheLayers.ActiveLayerIndex;
34 drawArea.TheLayers[al].Graphics[0].MoveHandleTo(point, 5);
35 drawArea.Refresh();
36 }
37 }
38  
39 public override void OnMouseUp(DrawArea drawArea, MouseEventArgs e)
40 {
41 OpenFileDialog ofd = new OpenFileDialog();
42 ofd.Title = "Select an Image to insert into map";
43 ofd.Filter = "Bitmap (*.bmp)|*.bmp|JPEG (*.jpg)|*.jpg|Fireworks (*.png)|*.png|GIF (*.gif)|*.gif|Icon (*.ico)|*.ico|All files|*.*";
44 ofd.FilterIndex = 6;
45 ofd.InitialDirectory = Environment.SpecialFolder.MyPictures.ToString();
46 int al = drawArea.TheLayers.ActiveLayerIndex;
47 while (true)
48 {
49 var dlgResult = ofd.ShowDialog();
50 if (dlgResult != DialogResult.OK)
51 {
52 drawArea.TheLayers[al].Graphics.RemoveAt(0);
53 break;
54 }
55 else
56 {
57 try
58 {
59 ((DrawImage) drawArea.TheLayers[al].Graphics[0]).TheImage = (Bitmap) Bitmap.FromFile(ofd.FileName);
60 drawArea.AddCommandToHistory(new CommandAdd(drawArea.TheLayers[al].Graphics[0]));
61 break;
62 }
63 catch (Exception ex)
64 {
65 MessageBox.Show("Can not load file.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
66 }
67 }
68 }
69 ofd.Dispose();
70 base.OnMouseUp(drawArea, e);
71 }
72  
73 #region initial image loading
74 public void InsertImage(DrawArea drawArea, string filePath, bool moveToBack, bool isInitialImage, DrawImage paradigm)
75 {
76 var theImage = (Bitmap) Bitmap.FromFile(filePath);
77 byte[] bytes;
78 using (MemoryStream ms = new MemoryStream())
79 {
80 theImage.Save(ms, ImageFormat.Png);
81 bytes = StreamToBytes(ms);
82 }
83 InsertImage(drawArea, bytes, moveToBack, isInitialImage, paradigm);
84 }
85  
86 /// <summary>
87 /// Source: http://stackoverflow.com/questions/221925/creating-a-byte-array-from-a-stream
88 /// </summary>
89 /// <param name="input"></param>
90 /// <param name="streamDoesntChange"></param>
91 /// <returns></returns>
92 public static byte[] StreamToBytes(Stream input, bool streamDoesntChange = true)
93 {
94 using (input)
95 {
96 input.Seek(0, SeekOrigin.Begin);
97 byte[] buffer = streamDoesntChange ? new byte[input.Length] : new byte[16*1024];
98 using (MemoryStream ms = new MemoryStream())
99 {
100 int read;
101 while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
102 {
103 ms.Write(buffer, 0, read);
104 }
105 return ms.ToArray();
106 }
107 }
108 }
109  
110 public void InsertImage(DrawArea drawArea, byte[] bytes, bool moveToBack, bool isInitialImage, DrawImage paradigm)
111 {
112 Bitmap theImage;
113 using (var ms = new MemoryStream(bytes))
114 {
115 theImage = (Bitmap)Bitmap.FromStream(ms);
116 }
117 InsertImage(drawArea, theImage, moveToBack, isInitialImage, paradigm);
118 }
119  
120 public void InsertImage(DrawArea drawArea, Image image, bool moveToBack, bool isInitialImage, DrawImage paradigm)
121 {
122 //theImage.Save("D:\\im.bmp", ImageFormat.Bmp);
123 if (paradigm == null)
124 {
125 paradigm = new DrawImage(0, 0, isInitialImage);
126 }
127 //else
128 //{
129 // paradigm.TheImage = (Bitmap)image;
130 //}
131 AddNewObject(drawArea, paradigm);
132 int al = drawArea.TheLayers.ActiveLayerIndex;
133 drawArea.TheLayers[al].Graphics[0].MoveHandleTo(new Point(image.Width, image.Height), 5);
134 ((DrawImage) drawArea.TheLayers[al].Graphics[0]).TheImage = (Bitmap)image;
135 drawArea.AddCommandToHistory(new CommandAdd(drawArea.TheLayers[al].Graphics[0]));
136 if (moveToBack)
137 {
138 drawArea.TheLayers[al].Graphics.MoveSelectionToBack();
139 }
140 drawArea.TheLayers[al].Graphics.UnselectAll();
141 }
142 #endregion
143 }
144 }