ÆÄÀÏ Áö¿ø
ÀÌÁ¦ Áö±Ý±îÁö ¸¸µç Paint ÇÁ·Î±×·¥¿¡ ÆÄÀÏ ±â´ÉÀ» Ãß°¡ÇØ º¸ÀÚ.
¿©±â¼´Â µÎ°¡Áö ÆÄÀÏ¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú´Ù. Çϳª´Â bmp, gif, jpgµî À̹ÌÁö ÆÄÀÏÀ̰í, ´Ù¸¥ Çϳª´Â ÀÏ¹Ý µ¥ÀÌÅÍ ÀúÀå ÆÄÀÏÀÌ´Ù.
À̹ÌÁö ÆÄÀÏ·Î ÀúÀåÇϱâ À§ÇØ ÆÄÀÏ ¸Þ´º¿¡ Export¸¦ Ãß°¡ÇÏÀÚ.
±×·± ´ÙÀ½ Export¸¦ ¼±ÅÃÇÏ¿© »ý¼ºµÈ ÇÔ¼ö¿¡¼ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇϸé À̹ÌÁö ÆÄÀÏ·Î ÀúÀåÀÌ °¡´ÉÇÏ°Ô µÈ´Ù.
private void exportToolStripMenuItem_Click(object sender, EventArgs e) { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Image Files(*.bmp;*.gif;*.jpg)|*.bmp;*.gif;*.jpg"; if (dlg.ShowDialog() != DialogResult.OK) return; Bitmap bitmap = new Bitmap(imageSize.Width, imageSize.Height); this.objList.Draw(Graphics.FromImage(bitmap)); bitmap.Save(dlg.FileName); } |
À̹ÌÁö ÀúÀåÀº ¾ÆÁÖ °£´ÜÇÏ´Ù.
Bitmap bitmap = new Bitmap(imageSize.Width, imageSize.Height);
À̹ÌÁö Å©±â¿¡ ¸ÂÃß¾î »ý¼ºÇÑ´Ù.
this.objList.Draw(Graphics.FromImage(bitmap));
Áö³½Ã°£ ¼³¸íÇÑ ±×¸®´Â ·çƾÀÌ´Ù. ³Ñ¾î°¡´Â ÀÎÀÚ¿¡ À̹ÌÁö·ÎºÎÅÍ Graphics¸¦ ¸¸µé¾î ³Ñ°ÜÁÖ°Ô µÇ¸é À̹ÌÁö¿¡ ±×¸²À» ±×¸®°ÔµÈ´Ù.
bitmap.Save(dlg.FileName);
ÆÄÀÏ·Î ÀúÀåÇÑ´Ù. bmp, gif, jpgµî ¸ðµç À̹ÌÁö ÆÄÀÏÀÌ Áö¿øµÈ´Ù.
ÀÌÁ¦ ÀÏ¹Ý µ¥ÀÌÅÍ·Î ÀúÀåÀ» ÇØº¸ÀÚ.
ÀúÀå ¸Þ´º¿Í »õÀ̸§À¸·Î ÀúÀå ¸Þ´ºÀ» ¼±ÅÃÇßÀ» ¶§ ½ÇÇàµÇ´Â ÇÔ¼ö¸¦ ¸¸µé¾î ´ÙÀ½°ú °°ÀÌ Save()¿Í SaveAs ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ±¸¼ºÇÑ´Ù.
void Save() { if (string.IsNullOrEmpty(this.strFileName)) { SaveAs(); return; } SaveReal(this.strFileName); }
void SaveAs() { SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "*.dat|*.dat"; if (dlg.ShowDialog() != DialogResult.OK) return;
SaveReal(dlg.FileName); }
private void saveToolStripMenuItem_Click(object sender, EventArgs e) { Save(); }
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) { SaveAs(); } |
À̹ÌÁö ÀúÀåÀº ¾ÆÁÖ °£´ÜÇÏ´Ù.
Bitmap bitmap = new Bitmap(imageSize.Width, imageSize.Height);
À̹ÌÁö Å©±â¿¡ ¸ÂÃß¾î »ý¼ºÇÑ´Ù.
this.objList.Draw(Graphics.FromImage(bitmap));
Áö³½Ã°£ ¼³¸íÇÑ ±×¸®´Â ·çƾÀÌ´Ù. ³Ñ¾î°¡´Â ÀÎÀÚ¿¡ À̹ÌÁö·ÎºÎÅÍ Graphics¸¦ ¸¸µé¾î ³Ñ°ÜÁÖ°Ô µÇ¸é À̹ÌÁö¿¡ ±×¸²À» ±×¸®°ÔµÈ´Ù.
bitmap.Save(dlg.FileName);
ÆÄÀÏ·Î ÀúÀåÇÑ´Ù. bmp, gif, jpgµî ¸ðµç À̹ÌÁö ÆÄÀÏÀÌ Áö¿øµÈ´Ù.
ÀÌÁ¦ ÀÏ¹Ý µ¥ÀÌÅÍ·Î ÀúÀåÀ» ÇØº¸ÀÚ.
ÀúÀå ¸Þ´º¿Í »õÀ̸§À¸·Î ÀúÀå ¸Þ´ºÀ» ¼±ÅÃÇßÀ» ¶§ ½ÇÇàµÇ´Â ÇÔ¼ö¸¦ ¸¸µé¾î ´ÙÀ½°ú °°ÀÌ Save()¿Í SaveAs ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ±¸¼ºÇÑ´Ù.
SaveÇÔ¼ö´Â ÆÄÀÏÀ̸§ÀÌ ¼³Á¤(¿±â ¹× ÀúÀå ÈÄ ¼³Á¤ÇÔ)µÇÁö ¾Ê¾ÒÀ¸¸é SaveAs¸¦ È£ÃâÇϵµ·Ï ÇÏ°í ¼³Á¤µÇ¾î ÀÖÀ¸¸é SaveReal(ÀÌÈÄ ¼³¸í)ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ±¸¼ºÇÏ¿´´Ù.
SaveAsÇÔ¼ö´Â ¹«Á¶°Ç ÀúÀå ´ëÈ »óÀÚ¸¦ ¶ç¿ö ÆÄÀÏÀ̸§À» ¾òµµ·Ï ÇÏ¿© SaveRealÀ» È£ÃâÇϵµ·Ï ±¸¼ºÇÏ¿´´Ù.
ÀÌÁ¦ ½ÇÁ¦ ÀúÀåÇÏ´Â SaveRealÇÔ¼ö¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ
void SaveReal(string strFileName) { Stream stream = null; try { stream = new FileStream(strFileName, FileMode.OpenOrCreate); BinaryWriter file = new BinaryWriter(stream, Encoding.Default); this.objList.Write(file); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return; } finally { if (stream != null) stream.Close(); } this.strFileName = strFileName; this.bModified = false; }
|
Stream stream = new FileStream(strFileName, FileMode.OpenOrCreate);
¸ÕÀú ÆÄÀÏ ½ºÆ®¸²À» ¾ò´Â´Ù. FileMode´Â OpenOrCreate·Î ¼³Á¤ÇÑ´Ù.
BinaryWriter file = new BinaryWriter(stream, Encoding.Default);
StreamÀ¸·ÎºÎÅÍ ½ÇÁ¦ ÆÄÀÏÀ» ¾²±â À§ÇÑ BinaryWriter¸¦ ¾ò´Â´Ù.
this.objList.Write(file);
objListÀÇ ½ÇÁ¦ ÆÄÀÏ¿¡ ³»¿ëÀ» ÀúÀåÇÏ´Â ·çƾÀ» ±¸Çö(ÀÌÈÄ¿¡ ¼³¸í)ÇÑ ÇÔ¼ö Write¸¦ È£ÃâÇÑ´Ù.
stream.Close();
StreamÀ» ´Ý´Â´Ù.
³ª¸ÓÁö ºÎºÐÀº ¸ðµÎ ¿¹¿Üó¸® ¹× ±âŸ ±â´É(ÆÄÀÏ À̸§ ¼³Á¤ ¹× ¼öÁ¤ Flag¸¦ fasle·Î ¼³Á¤)À» À§ÇØ ÀÔ·ÂÇÑ Ç׸ñÀÌ´Ù.
ÀÌÁ¦ ½ÇÁ¦ ÆÄÀÏ ³»¿ëÀ» ÀúÀåÇϱâ À§ÇÑ ÇÔ¼ö¸¦ ±¸ÇöÇØº¸ÀÚ. ObjList.cs¿¡ ´ÙÀ½°ú °°ÀÌ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
public void Write(BinaryWriter file) { int nCount = this.objList.Count; DrawObj obj; string strType; file.Write(this.strVersion); file.Write(pBuffer); file.Write(nCount); for (int i = 0; i < nCount; i++) { obj = (DrawObj)this.objList[i];
strType = obj.GetType().Name; file.Write(strType); obj.Write(file); } } |
ù ¹øÂ°·Î ¹öÀü(strVersion)À» ÀúÀåÇÑ´Ù. ÇâÈÄ ÆÄÀÏÀÌ º¯°æµÇ¸é ÀÌ ¹öÀü Á¤º¸·Î °ú°ÅÆÄÀÏÀ» ÀÐÀ» ¼ö ÀÖµµ·Ï ±¸¼ºÇÑ´Ù.
pBuffer¸¦ ÀúÀåÇÑ´Ù. pBuffer´Â »ý¼ºÀÚ¿¡¼ Àüü µ¥ÀÌÅ͸¦ 0À¸·Î ÁöÁ¤ÇÑ´Ù.
string strVersion = "1.0"; const int BUFFER_SIZE = 30; Byte[] pBuffer = new Byte[BUFFER_SIZE];
public ObjList() { for (int i = 0; i < BUFFER_SIZE; i++) { pBuffer[i] = 0; } } |
ÇâÈÄ ÀϺΠ³»¿ëÀÌ Ãß°¡µÉ °æ¿ì¸¦ ´ëºñÇÏ¿© ¹öÀü º¯°æ¾øÀÌ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºÇϱâ À§Çؼ ÀϺΠ¹öÆÛÀ» µÎ´Â °ÍÀÌ ÁÁ´Ù.
strType = obj.GetType().Name;
strType¿¡ Ŭ·¡½º À̸§ÀÌ ³Ñ¾î ¿Â´Ù. ÀÐÀ» ¶§ ±×¸®±â Á¾·ù¸¦ ±¸ºÐÇϱâ À§ÇØ ÀúÀåÇÑ´Ù.
ÀÌÁ¦ DrawObj.cs¿¡ ÀúÀå ·çÆ¾À» ±¸ÇöÇØ º¸ÀÚ.
public void Write(BinaryWriter file) { file.Write(rectPos.Left); file.Write(rectPos.Top); file.Write(rectPos.Width); file.Write(rectPos.Height);
int nColor = this.colorLine.ToArgb(); file.Write(nColor); nColor = this.colorFace.ToArgb(); file.Write(nColor);
file.Write(this.pBuffer); } |
±¸¼ºÀ» º¸¸é °¢ Ŭ·¡½º¿¡ ÇÊ¿äÇÑ Write¸¦ ¸¸µé°í ±× ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ±¸¼ºÇϵµ·Ï ÇÑ´Ù.
¸¸¾à Classº°·Î ÀúÀå ³»¿ëÀÌ ´Ù¸£´Ù¸é, WriteÇÔ¼ö¸¦ Virtual·Î ¼±¾ðÇÏ°í °³º° Class¿¡¼ overrideÇÏ¿© ÀÛ¼º(DrawÇÔ¼ö ÂüÁ¶)ÇÏ¿© ±¸¼ºÇÑ´Ù.
ÀÌÁ¦ Àбâ ÇÔ¼ö¸¦ ±¸ÇöÇØ º¸ÀÚ.
void LoadReal(string strFileName) { Stream stream = null; try { stream = new FileStream(strFileName, FileMode.Open); BinaryReader file = new BinaryReader(stream, Encoding.Default);
this.objList.Read(file); } catch (Exception e) { MessageBox.Show(e.ToString()); return; } finally { if (stream != null) stream.Close(); } this.strFileName = strFileName; this.bModified = false; Invalidate(); }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "*.dat|*.dat"; if (dlg.ShowDialog() != DialogResult.OK) return;
LoadReal(dlg.FileName); } |
Àбâ ÇÔ¼ö´Â ±¸Á¶ÀûÀÎ ¸é¿¡¼ ¾²±â¿Í ºñ½ÁÇϹǷΠ¼¼ºÎÀûÀ¸·Î ¼³¸íÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
ObjList.cs¿¡ ´ÙÀ½°ú °°ÀÌ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
public void Read(BinaryReader file) { DrawObj obj; string strType;
this.objList.Clear();
string strVersion = file.ReadString(); if (strVersion != this.strVersion) { MessageBox.Show("ÆÄÀÏ Format Error"); return; } file.Read(this.pBuffer, 0, BUFFER_SIZE);
int nCount = file.ReadInt32(); for (int i = 0; i < nCount; i++) { strType = file.ReadString(); if (string.IsNullOrEmpty(strType) == true) break; if (strType == "DrawLine") obj = new DrawLine(); else if (strType == "DrawRect") obj = new DrawRect(); else if (strType == "DrawEllipse") obj = new DrawEllipse(); else break;
obj.Read(file); Add(obj); } } |
DrawObj.cs¿¡ ´ÙÀ½°ú °°ÀÌ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
public void Read(BinaryReader file) { int nLeft = file.ReadInt32(); int nTop = file.ReadInt32(); int nWidth = file.ReadInt32(); int nHeight = file.ReadInt32(); this.rectPos = new Rectangle(nLeft, nTop, nWidth, nHeight);
int nColor = file.ReadInt32(); this.colorLine = Color.FromArgb(nColor); nColor = file.ReadInt32(); this.colorFace = Color.FromArgb(nColor);
file.Read(this.pBuffer, 0, BUFFER_SIZE); } |
´Ù¿î·Îµå