ÆÄÀÏ Áö¿ø

 

  ÀÌÁ¦ Áö±Ý±îÁö ¸¸µç 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);

        }

 

´Ù¿î·Îµå