21-1.À̹ÌÁö

21-1-1.Image Ŭ·¡½º

À̹ÌÁö´Â ¹Ì¸® ±×·ÁÁø ±×¸²ÀÌ´Ù. ¼º´Éº¸´Ù ¿¹»ÚÀåÇÑ ¿ÜÇüÀ» ´õ ¼±È£ÇÏ°í Çϵå¿þ¾î ¼º´ÉÀÌ °³¼±µÇ¾î À̹ÌÁö·Î ¶±Ä¥À» Çصµ ºÎ´ãµÇÁö ¾Ê¾Æ À̹ÌÁö·Î ÇÁ·Î±×·¥À» Àå½ÄÇÏ´Â °æ¿ì°¡ ¸¹´Ù. GDI+°¡ GDI¿¡ ºñÇØ ¿ùµîÈ÷ ¿ì¼öÇÑ Á¡Àº ¾ÐÃà À̹ÌÁö¸¦ ´Ù·ê ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. JPG, GIF, PNG, TIFF µî ¾ÐÃà È¿À²ÀÌ ³ô°í ´ëÁßÀûÀÎ Æ÷¸ËÀ» ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

À̹ÌÁö¸¦ Ç¥ÇöÇÏ´Â Image´Â Ãß»ó Ŭ·¡½º¿©¼­ °´Ã¼¸¦ Á÷Á¢ »ý¼ºÇÒ ¼ö ¾ø´Ù. ´Ù¸¸ ´ëÇ¥ ŸÀÔÀ¸·Î¼­ ÆÄ»ý Ŭ·¡½ºÀÎ BitmapÀ̳ª Metafile °´Ã¼¸¦ °¡¸®Å°±â¸¸ ÇÑ´Ù. Image °´Ã¼¸¦ »ý¼ºÇÒ ¶§´Â ´ÙÀ½ Á¤Àû ¸Þ¼­µå Áß Çϳª¸¦ È£ÃâÇÑ´Ù.

 

public static Image FromFile (string filename)

public static Bitmap FromHbitmap (IntPtr hbitmap)

public static Image FromStream (Stream stream)

 

µð½ºÅ©ÀÇ À̹ÌÁö ÆÄÀϷκÎÅÍ, Win32 ºñÆ®¸ÊÀ¸·ÎºÎÅÍ, ½ºÆ®¸²À¸·ÎºÎÅÍ À̹ÌÁö °´Ã¼¸¦ »ý¼ºÇÑ´Ù. ÆÄÀÏ¿¡¼­ ÀоîµéÀÌ´Â °ÍÀÌ Á¦ÀÏ °£ÆíÇÏ´Ù. ´ÙÀ½ ¿¹Á¦´Â JPG ÆÄÀϷκÎÅÍ À̹ÌÁö °´Ã¼¸¦ »ý¼ºÇÏ¿© È­¸éÀ¸·Î Ãâ·ÂÇÑ´Ù.

 

DrawImage

using System; ~ using System.Windows.Forms;

 

namespace DrawImage {

             public partial class Form1 : Form {

                           public Form1() {

                                        InitializeComponent();

                           }

 

                           private void Form1_Paint(object sender, PaintEventArgs e) {

                                        Image I = Image.FromFile("¾Æ±â.jpg");

                                        e.Graphics.DrawImage(I, 0, 0);

                           }

             }

}

 

FromFile ¸Þ¼­µå·Î "¾Æ±â.jpg" ÆÄÀÏÀ» Àоî À̹ÌÁö °´Ã¼¸¦ »ý¼ºÇÑ ÈÄ DrawImage ¸Þ¼­µå·Î Ãâ·ÂÇß´Ù. "¾Æ±â.jpg" ÆÄÀÏÀÌ ½ÇÇà ÆÄÀÏ°ú °°Àº µð·ºÅ͸®¿¡ ¹Ýµå½Ã ÀÖ¾î¾ß ÇÑ´Ù.

ÆíÀÇ»ó Paint À̺¥Æ®¿¡¼­ ÆÄÀÏÀ» Àоú´Âµ¥ À̹ÌÁö°°Àº °Å´ëÇÑ °´Ã¼´Â Load À̺¥Æ®¿¡¼­ ¹Ì¸® ÀÐ¾î µÎ¾î¾ß ÇÑ´Ù. ÆÄÀϷκÎÅÍ À̹ÌÁö °´Ã¼¸¦ »ý¼ºÇÏ´Â µ¿ÀÛÀº ±²ÀåÈ÷ ´À·Á ¿¹ºñ µ¿ÀÛÀ» ÃëÇØ µÎ¾î¾ß Çϸç Paint´Â ¿À·ÎÁö Ãâ·Â¸¸ ÇÏ´Â °ÍÀÌ ¿øÄ¢ÀÌ´Ù. ¿¹Á¦¿¡¼­ ÀÌ·¸°Ô ÇÏÀÚ¸é Çʵ带 ¼±¾ðÇØ¾ß ÇÏ°í Äڵ尡 Èð¾îÁ® ºÐ¼®Çϱ⠹ø°Å·Ó´Ù. ½Ç¹«¸¦ ÇÒ ¶§´Â È¿À²À» °í·ÁÇÏ¿© ¿øÄ¢´ë·Î ¹Ì¸® À̹ÌÁö¸¦ ÀÐ¾î ³õ¾Æ¾ß ÇÑ´Ù´Â °ÍÀ» ÀØÁö ¸»ÀÚ. ´ÙÀ½Àº Image Ŭ·¡½ºÀÇ ÇÁ·ÎÆÛƼÀÌ´Ù.

 

ÇÁ·ÎÆÛƼ

ŸÀÔ

¼³¸í

Width

int ¨Þ

À̹ÌÁöÀÇ ÆøÀÌ´Ù. ´ÜÀ§´Â Çȼ¿ÀÌ´Ù.

Height

int ¨Þ

À̹ÌÁöÀÇ ³ôÀÌÀÌ´Ù.

Size

Size ¨Þ

À̹ÌÁöÀÇ Æø°ú ³ôÀÌÀÌ´Ù.

Flags

int ¨Þ

À̹ÌÁöÀÇ Çȼ¿ Ư¼ºÀ» Á¶»çÇÑ´Ù. °¢ ¼ºÁúÀº ºñÆ® Á¶ÇÕÀ¸·Î Ç¥ÇöµÇ´Âµ¥ È®´ë °¡´ÉÇÑÁö, ¾ËÆÄ Ã¤³ÎÀÌ ÀÖ´ÂÁö, Àбâ Àü¿ëÀÎÁö µîÀÇ Á¤º¸°¡ ÀÖ´Ù.

HorizontalResolution

float ¨Þ

¼öÆò ÇØ»óµµÀÌ´Ù. ÀÎÄ¡´ç Çȼ¿¼ö·Î Ç¥ÇöÇÑ´Ù.

VerticalResolution

float ¨Þ

¼öÁ÷ ÇØ»óµµÀÌ´Ù. ÀÎÄ¡´ç Çȼ¿¼ö·Î Ç¥ÇöÇÑ´Ù.

Palette

ColorPalette

À̹ÌÁöÀÇ »ö»óÇ¥ÀÌ´Ù.

PixelFormat

PixelFormat ¨Þ

À̹ÌÁöÀÇ Çȼ¿ Çü½ÄÀ» Á¶»çÇÑ´Ù. PixelFormat ¿­°ÅÇüÀ¸·Î Ç¥ÇöÇϸç Á¡À» ±¸¼ºÇÏ´Â ºñÆ® ±¸Á¶¸¦ Á¶»çÇÑ´Ù. ½±°Ô ¸»ÇØ Èæ¹éÀÎÁö 16ºñÆ® »ö»óÀ» ¾²´ÂÁö, Æ®·çÄ÷¯ À̹ÌÁöÀÎÁö µîÀÇ Á¤º¸ÀÌ´Ù.

PropertyList

int[]¨Þ

À̹ÌÁö¿¡ ÀúÀåµÈ ¼Ó¼ºÀÇ ID ¸ñ·ÏÀ» Á¶»çÇÑ´Ù. Á¦ÀÛÀÚ, »ý¼º Àåºñ, ³¯Â¥ µîÀÇ ´Ù¾çÇÑ ¼Ó¼º Á¤º¸°¡ ÀúÀåµÇ¾î ÀÖ´Ù.

PropertyItem

PropertyItem[] ¨Þ

À̹ÌÁö¿¡ ÀúÀåµÈ ¼Ó¼ºÀÇ ¸ÞŸ µ¥ÀÌÅÍ ¸ñ·ÏÀ» Á¶»çÇÑ´Ù.

RawFormat

ImageFormat ¨Þ

À̹ÌÁöÀÇ Æ÷¸ËÀ» Á¶»çÇÑ´Ù. ImageFormat Ŭ·¡½º·Î Ç¥ÇöµÇ¸ç BMP, JPG, GIF µîÀÇ À̹ÌÁö Æ÷¸ËÀ» Ç¥ÇöÇÑ´Ù.

 

À̹ÌÁöÀÇ Å©±â³ª »ö»ó¼ö, ÇØ»óµµ °°Àº ¼ºÁúÀ» Á¶»çÇÑ´Ù. ÀÌ Áß À̹ÌÁö Å©±âÀÎ Width, Height°¡ ÀÚÁÖ »ç¿ëµÈ´Ù. À̹ÌÁöÀÇ °íÀ¯ÇÑ Æ¯¼ºÀ̾ ´ëºÎºÐ Àбâ Àü¿ëÀÌ´Ù.

21-1-2.DrawImage

À̹ÌÁö¸¦ Ãâ·ÂÇÏ´Â DrawImage ¸Þ¼­µå´Â ¹«·Á 30°³ÀÇ ¹öÀüÀ¸·Î ¿À¹ö·ÎµåµÇ¾î ÀÖ´Ù. ±× Áß Àý¹ÝÀÌ ½Ç¼öÇü ¹öÀüÀε¥ 50% ¼¼ÀÏÇصµ 15°³³ª µÈ´Ù. °£´ÜÇÑ °ÍºÎÅÍ ¼ø¼­´ë·Î ±¸°æÇØ º¸ÀÚ.

 

public void DrawImage (Image image,Point point)

public void DrawImage (Image image,int x,int y)

 

ù ¹ø° Àμö´Â Ç×»ó Ãâ·Â ´ë»ó À̹ÌÁöÀÎ Image °´Ã¼ÀÌ´Ù. µÎ ¹ø° ÀμöºÎÅÍ Ãâ·Â ÁÂÇ¥³ª ¿µ¿ª, Ãâ·Â ¹æ¹ýÀ» ÁöÁ¤Çϴµ¥ Àμö Á¾·ù¿¡ µû¶ó ±â´É»óÀÇ Â÷ÀÌ°¡ ¹ß»ýÇÑ´Ù. Point¸¦ ÃëÇÏ´Â °Í°ú (x, y) ÁÂÇ¥¸¦ ÃëÇÏ´Â ¸Þ¼­µå´Â µ¿ÀÏÇϹǷΠ´ÙÀ½ µÎ È£Ãâ¹®Àº °°´Ù.

 

e.Graphics.DrawImage(I, 0, 0);

e.Graphics.DrawImage(I, new Point(0, 0));

 

ÁÂÇ¥¸¸ ÁöÁ¤ÇϹǷΠũ±â´Â ¿øº» ±×´ë·ÎÀ̸ç È®ÀåÀ̳ª Ãà¼Ò´Â ¾ø´Ù. ÁöÁ¤ÇÑ ÁÂÇ¥¿¡ À̹ÌÁö Àüü°¡ ¿ø·¡ Å©±â´ë·Î Ãâ·ÂµÈ´Ù. ¹Ý¸é ´ÙÀ½ µÎ ¸Þ¼­µå´Â Ãâ·Â ¿µ¿ªÀ» ÁöÁ¤ÇÏ¿© È®Àå, Ãà¼Ò°¡ ¹ß»ýÇÑ´Ù.

 

public void DrawImage (Image image,Rectangle rect)

public void DrawImage (Image image,int x,int y,int width,int height)

 

Rectangle °´Ã¼³ª Á¤¼öÇüÀÇ XYWH·Î Ãâ·Â ¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù. ¿øº»º¸´Ù ´õ Å« ¿µ¿ª¿¡ Ãâ·ÂÇϸé È®´ëÀÌ°í ´õ Á¼Àº ¿µ¿ª¿¡ Ãâ·ÂÇϸé Ãà¼ÒÀÌ´Ù. ´ÙÀ½ µÎ È£Ãâ¹®Àº À̹ÌÁö¸¦ ÀÛ°Ô Ãà¼ÒÇÏ¿© Ãâ·ÂÇÑ´Ù.

 

e.Graphics.DrawImage(I, new Rectangle(0, 0, 300, 250));

e.Graphics.DrawImage(I, 0, 0, 300, 250);

 

600*500 Å©±âÀÇ ¿øº» À̹ÌÁö¸¦ 300*250ÀÇ ¿µ¿ª¿¡ Ãâ·ÂÇßÀ¸¹Ç·Î Æø°ú ³ôÀÌ´Â Àý¹ÝÀ¸·Î Ãà¼ÒµÈ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½ ù ¹ø° ±×¸²°ú °°´Ù.

  

À̹ÌÁö Æø°ú Ãâ·ÂÆøÀÌ 2¹è Â÷À̳ª¸ç ³ôÀ̵µ °°Àº ºñÀ²·Î Ãà¼ÒÇÏ¿© Á¾È¾ºñ´Â À¯ÁöÇß´Ù. ºñÀ²À» ¸ÂÃßÁö ¾Ê°í ÀÓÀÇÀÇ »ç°¢¿µ¿ª¿¡ Ãâ·ÂÇϸé À̹ÌÁö°¡ ±æÂßÇϰųª Â¥¸®¸ù¶¥ÇÏ°Ô Ãâ·ÂµÈ´Ù. À§ ±×¸²ÀÇ µÎ ¹ø°, ¼¼ ¹ø°´Â ´ÙÀ½ ÄÚµå·Î Ãâ·ÂÇÑ °ÍÀÌ´Ù.

 

e.Graphics.DrawImage(I, 0, 0, 150, 250);

e.Graphics.DrawImage(I, 0, 0, 300, 125);

 

±×¸²ÀÌ Âî±×·¯Á® º¸±â¿¡ ÁÁÁö ¾Ê´Ù. ÇÊ¿ä¿¡ µû¶ó È®´ë³ª Ãà¼ÒÇÏ´õ¶óµµ °¡±ÞÀû Á¾È¾ºñ´Â À¯ÁöÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÆíÀÇ»ó 300, 250 »ó¼ö¸¦ »ç¿ëÇßÁö¸¸ Width, Height ÇÁ·ÎÆÛƼÀÇ ºñÀ²·Î Ç¥±âÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦ µé¾î I À̹ÌÁö¸¦ Àý¹ÝÀ¸·Î Ãà¼ÒÇÏ·Á¸é Ãâ·Â »ç°¢¿µ¿ªÀÇ Å©±â¸¦ I.Width/2, I.Height/2·Î ÁöÁ¤ÇÏ¸é µÈ´Ù. °öÇÏ¸é ¹°·Ð È®´ëµÈ´Ù.

RectangleÀ» ÃëÇÏ´Â ¸Þ¼­µå´Â È®´ë, Ãà¼ÒÇÏÁö¸¸ ¾î·µç À̹ÌÁö Àüü¸¦ ´Ù Ãâ·ÂÇÑ´Ù. ¹Ý¸é ´ÙÀ½ ¸Þ¼­µå´Â À̹ÌÁöÀÇ ÀϺκи¸ Ãâ·ÂÇÑ´Ù. srcRect´Â À̹ÌÁöÀÇ ¾î¶² ºÎºÐÀ» Ãâ·ÂÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. srcUnitÀº Ãâ·Â¿¡ »ç¿ëÇÒ ´ÜÀ§ÀÌ´Ù.

 

public void DrawImage (Image image,int x,int y,Rectangle srcRect,GraphicsUnit srcUnit)

 

´ÙÀ½ È£Ãâ¹®Àº ¿ÞÂÊÀÇ ¾Æ±â¸¸ Ãâ·ÂÇÑ´Ù.

 

e.Graphics.DrawImage(I, 10, 10, new Rectangle(70, 50, 250, 380), GraphicsUnit.Pixel);

 

À̹ÌÁöÀÇ (70,50) À§Ä¡¿¡¼­ ½ÃÀÛÇÏ¿© Æø 250, ³ôÀÌ 380 ¸¸Å­À» È­¸éÀÇ (10, 10) ÁÂÇ¥¿¡ Ãâ·ÂÇß´Ù. ¿øº» À̹ÌÁö¿¡ ´ëÇØ Ãâ·Â ¿µ¿ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸ È­¸é¿¡ ´ëÇؼ­´Â ÁÂÇ¥¸¸ ÁöÁ¤ÇϹǷΠȮ´ë, Ãà¼Ò´Â ÇÒ ¼ö ¾ø´Ù.

 

´ÙÀ½ ¸Þ¼­µå´Â Àμö°¡ ´õ ¸¹Àºµ¥ Rectangle °´Ã¼¿Í XYWH Á¤¼ö ³× °³¸¦ ¹Þ´Â´Ù. Ãâ·Â ¿µ¿ª°ú À̹ÌÁöÀÇ ¿µ¿ªÀ» °°ÀÌ ÁöÁ¤ÇÒ ¼ö ÀÖ¾î À̹ÌÁöÀÇ Æ¯Á¤ ºÎºÐ¸¸ ¿øÇÏ´Â Å©±â·Î Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.

 

public void DrawImage (Image image,Rectangle destRect,int srcX,int srcY,int srcWidth,int srcHeight,GraphicsUnit srcUnit)

 

´ÙÀ½ È£Ãâ¹®Àº ¿ÞÂÊ ¾Æ±â¸¸ Á¶±×¸Ä°Ô Ãà¼ÒÇؼ­ Ãâ·ÂÇÑ´Ù.

 

e.Graphics.DrawImage(I, new Rectangle(10,10,200,200), 70, 50, 250, 380, GraphicsUnit.Pixel);

 

¿øº» À̹ÌÁöÀÇ (70, 50) À§Ä¡¿¡¼­ Æø 250, ³ôÀÌ 380¸¸Å­À» È­¸éÀÇ (10, 10) ÁÂÇ¥¿¡ Æø 200, ³ôÀÌ 200À¸·Î Ãâ·ÂÇß´Ù. ºñÀ²À̳ª Á¾È¾ºñ±îÁö ¸¶À½´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

¿©±â±îÁö »ìÆ캻 DrawImage ¸Þ¼­µå¸¦ Á¤¸®ÇØ º¸¸é ÃëÇÏ´Â ÀμöÀÇ Á¾·ù¿¡ µû¶ó Ãâ·Â ±â´ÉÀÇ ·¹º§ÀÌ ´Þ¶óÁüÀ» ¾Ë ¼ö ÀÖ´Ù. »ó¼¼ÇÑ Á¤º¸¸¦ Àü´ÞÇϸé Ãâ·Â Çüŵµ ´Ù¾çÇØÁø´Ù.

 

Àμö

±â´É

Point(¶Ç´Â X, Y)

À̹ÌÁö Àüü¸¦ ±×´ë·Î Ãâ·ÂÇÑ´Ù.

Rectangle(¶Ç´Â XYWH)

À̹ÌÁö Àüü¸¦ È®´ë, Ãà¼ÒÇÏ¿© Ãâ·ÂÇÑ´Ù.

Point, Rectangle

À̹ÌÁöÀÇ ÀϺθ¦ ±×´ë·Î Ãâ·ÂÇÑ´Ù.

Rectangle, Rectangle

À̹ÌÁöÀÇ ÀϺθ¦ È®´ë, Ãà¼ÒÇÏ¿© Ãâ·ÂÇÑ´Ù.

 

Rectangle µÎ °³¸¦ ¹Þ´Â DrawImage ¸Þ¼­µå´Â ¾ÕÂÊÀÇ ¸ðµç ¸Þ¼­µå¸¦ Æ÷ÇÔÇÏ´Â ¼ÀÀÌ´Ù. ÇÏÁö¸¸ Àμö°¡ ¸¹À¸¸é ¹ø°Å·Î¿ö ²À ÇÊ¿äÇÑ Àμö¸¸ ¹Þ´Â ¹öÀüÀÌ ¿À¹ö·ÎµåµÇ¾î ÀÖ´Ù. °¡Àå ÀÚÁÖ »ç¿ëÇÏ´Â ¹öÀüÀº Point¸¦ ÃëÇÏ´Â ´Ü¼øÇÑ ¹öÀüÀÌ´Ù. ´ÙÀ½Àº Á¶±Ý ƯÀÌÇÑ Ãâ·Â ¸Þ¼­µå¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ½Ç¿ë¼ºÀÌ ¶³¾îÁöÁö¸¸ ÇÑ ¹øÂë ±¸°æÇØ º¼¸¸Å­ Àç¹Ì´Â ÀÖ´Ù. ´ÙÀ½ ¸Þ¼­µå´Â ÆòÇà »çº¯Çü¿¡ À̹ÌÁö¸¦ Âî±×·¯¶ß·Á Ãâ·ÂÇÑ´Ù.

 

public void DrawImage (Image image, Point[] destPoints, Rectangle srcRect, GraphicsUnit srcUnit)

 

Å©±â 3ÀÇ Point ¹è¿­·Î ÆòÇà »çº¯ÇüÀ» Á¤ÀÇÇÏ¿© Ãâ·Â ¿µ¿ªÀ» ÁöÁ¤ÇÏ°í srcRect Àμö·Î À̹ÌÁöÀÇ ¿øº» ¿µ¿ªÀ» ÁöÁ¤ÇÑ´Ù. ÆòÇà »çº¯ÇüÀº Á»ó´Ü, ¿ì»ó´Ü, ÁÂÇÏ´Ü ²ÀÁöÁ¡ ¼¼ °³ÀÇ ÁÂÇ¥·Î Á¤ÀÇÇϴµ¥ ¸¶ÁÖº¸´Â º¯ÀÌ ÆòÇàÇÏ´Ù´Â Á¶°Ç¿¡ ÀÇÇØ ¿ìÇÏ´Ü ÁÂÇ¥´Â ÀÚµ¿ °áÁ¤µÈ´Ù. ´ÙÀ½ ÄÚµå´Â ¿ÞÂÊ ¾Æ±â ¾ó±¼À» ¿À¸¥ÂÊÀ¸·Î ¾à°£ ±â¿ï¾îÁø ÆòÇà »çº¯Çü¿¡ ³¢¿ö ¸ÂÃá´Ù.

 

Rectangle R = new Rectangle(70, 50, 250, 380);

Point[] pts = { new Point(0, 0), new Point(200, 0), new Point(100, 300) };

e.Graphics.DrawImage(I, pts, R, GraphicsUnit.Pixel);

 

À̹ÌÁö¸¦ ȸÀü½ÃÅ°°Å³ª Á¤À°¸éüÀÇ °¢ ¸é¿¡ Ãâ·ÂÇÏ¿© ÀÔüÀûÀÎ È¿°ú¸¦ ³»°í ½ÍÀ» ¶§ ÇÑ ¹øÂë ½á º¼¸¸ Çѵ¥ ±× Á¤µµ È¿°ú¸¦ ¹Ù¶õ´Ù¸é GDI+º¸´Ù´Â 3D ±×·¡ÇÈ ¶óÀ̺귯¸®¸¦ È°¿ëÇÏ´Â °ÍÀÌ ÀûÇÕÇÏ°í ´Ù¾çÇÑ ±â±³¸¦ ºÎ¸± ¼ö ÀÖ´Ù. GDI+´Â ¾î·°Å³ª 2D ±×·¡ÇÈ ¶óÀ̺귯¸®ÀÌ´Ù.

¸¶Áö¸·À¸·Î °¡Àå Àμö°¡ ¸¹Àº, Áï °¡Àå ±â´ÉÀÌ ¸¹Àº ¸Þ¼­µå¸¦ ±¸°æÇØ º¸ÀÚ. Àμö°¡ 11°³³ª µÇ´Âµ¥ RectangleÀÇ °¢ Çʵ带 ºÐÇØÇϸé ÃÑ 15°³ÀÇ Àμö°¡ Àü´ÞµÇ´Â ¼ÀÀÌ´Ù.

 

public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData)

 

À̹ÌÁöÀÇ Æ¯Á¤ ºÎºÐ¸¸ È­¸éÀÇ ÁöÁ¤ÇÑ ¿µ¿ª¿¡ È®´ë, Ãà¼ÒÇؼ­ Ãâ·ÂÇÒ ¼ö ÀÖÀ½Àº ¹°·ÐÀÌ°í ´ÜÀ§¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ°í Ãâ·ÂÁß¿¡ º¯È¯ÇÒ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ Ãâ·Â °úÁ¤¿¡ È£ÃâµÉ ÄÝ¹é ¸Þ¼­µå¸¦ ÅëÇØ ¾îµð±îÁö Ãâ·ÂµÇ¾ú´ÂÁö °¨½ÃÇϰųª Áß°£¿¡ Ãë¼ÒÇÒ ¼öµµ ÀÖ´Ù. ±â´ÉÀûÀ¸·Î °¡Àå ¿Ïº®ÇÏÁö¸¸ ±×¸¸Å­ È°¿ëÇϱâ´Â ±î´Ù·Ó´Ù.

¾ÆÁÖ Å« À̹ÌÁö´Â Ãâ·Â ½Ã°£ÀÌ ¿À·¡ °É¸®´Âµ¥ °¡¸¸È÷ ¸ØÃç ÀÖ´Â °Íº¸´Ù Ãâ·Â ÁøÇà °úÁ¤À» º¸¿©ÁÖ´Â °ÍÀÌ ÁÁ´Ù. ¶ÇÇÑ À̹ÌÁö¸¦ ±×¸®´Â Áß¿¡ »ç¿ëÀÚ°¡ ´ÙÀ½ À̹ÌÁö·Î À̵¿ÇØ ¹ö¸± ¼ö ÀÖ¾î Áß°£¿¡ Ãë¼ÒÇÒ ¼öµµ ÀÖ¾î¾ß ÇÑ´Ù. Àü¹® ±×·¡ÇÈ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù¸é ÄÝ¹é ¸Þ¼­µåµµ ÇʼöÀûÀÌ´Ù.

21-1-3.ºñÆ®¸Ê

BitmapÀº ºñÆ®¸Ê ±× ÀÚü¸¦ Ç¥ÇöÇÏ¸ç ·¡½ºÅÍ µ¥ÀÌÅ͸¦ °ü¸®ÇÑ´Ù. Image´Â Á¸ÀçÇÏ´Â À̹ÌÁö¸¸ Ãâ·ÂÇÏ´Â ÀϹÝÀûÀΠŬ·¡½ºÀε¥ ºñÇØ BitmapÀº À̹ÌÁö¸¦ »ý¼ºÇϰųª Á¶ÀÛÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ ±â´ÉÀÌ ´õ ¸¹´Ù.

 

public Bitmap (Image original)

public Bitmap (Stream stream)

public Bitmap (string filename)

public Bitmap (int width,int height [,PixelFormat format])

 

À̹ÌÁö °´Ã¼³ª ½ºÆ®¸², ÆÄÀϷκÎÅÍ »ý¼ºÇϰųª Å©±â¿Í Æ÷¸ËÀ» ÁöÁ¤ÇÏ¿© Á÷Á¢ »ý¼ºÇÑ´Ù. Æø°ú ³ôÀ̸¸ ÁöÁ¤Çϸé 32ºñÆ® »ö»óÀÇ ºñÆ®¸Ê °´Ã¼°¡ »ý¼ºµÇ¸ç »ö»ó Æ÷¸ËÀ» Á÷Á¢ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¸°Ô ¸¸µç À̹ÌÁö´Â ´Ù¾çÇÑ ¸ñÀû¿¡ »ç¿ëµÇ´Âµ¥ ÁÖ·Î ¸Þ¸ð¸® »óÀÇ ÀÓ½ÃÀûÀÎ Ãâ·Â Ç¥¸éÀ¸·Î »ç¿ëµÈ´Ù.

È­¸éÀ¸·Î Ãâ·ÂÀ» ³» º¸³»µí ºñÆ®¸Ê Ç¥¸éÀ¸·Î Ãâ·ÂÀ» ³» º¸³»´Âµ¥ ÀÌ·± ¸ñÀûÀ¸·Î »ç¿ëÇÏ´Â ºñÆ®¸ÊÀ» ¿ÀÇÁ ½ºÅ©¸° ºñÆ®¸Ê ¶Ç´Â °¡»ó È­¸éÀ̶ó°í ÇÑ´Ù. °¡»ó È­¸éÀ¸·Î Ãâ·ÂÇÏ·Á¸é ¸ÕÀú Graphics Ŭ·¡½ºÀÇ ´ÙÀ½ Á¤Àû ¸Þ¼­µå·Î ºñÆ®¸ÊÀ» Ãâ·Â Ç¥¸éÀ¸·Î ÇÏ´Â Graphics °´Ã¼¸¦ ¾ò´Â´Ù.

 

public static Graphics FromImage (Image image)

 

¸®ÅϵǴ Graphics °´Ã¼¸¦ ÅëÇØ ¸ðµç Ãâ·Â ¸Þ¼­µå¸¦ ÀÚÀ¯ ÀÚÀç·Î È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç ¸ðµç Ãâ·ÂÀº È­¸éÀÌ ¾Æ´Ñ ºñÆ®¸Ê¿¡ ±×·ÁÁø´Ù. ºñÆ®¸ÊÀÌ ºñµð¿À ·¥ ¿ªÇÒÀ» ÇÏ¸ç ºü¸¥ ¼Óµµ·Î È­¸éÀ¸·Î Àü¼ÛÇÑ´Ù. ÀÌ ±â¹ýÀ» È°¿ëÇÏ¸é ¹é±×¶ó¿îµå¿¡¼­ ±×¸²À» ¹Ì¸® ÁغñÇÑ ÈÄ °á°ú¸¸ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.

 

BackgroundImage

using System; ~ using System.Windows.Forms;

 

namespace BackgroundImage {

             public partial class Form1 : Form {

                           private Bitmap B = new Bitmap(600, 400);

 

                           public Form1() {

                                        InitializeComponent();

                           }

 

                           private void Form1_Paint(object sender, PaintEventArgs e) {

                                        e.Graphics.DrawImage(B, 0, 0);

                           }

 

                           private void Form1_MouseClick(object sender, MouseEventArgs e) {

                                        if (e.Button == MouseButtons.Left) {

                                                     Graphics G = Graphics.FromImage(B);

                                                     G.Clear(BackColor);

                                                     Random R = new Random();

 

                                                     for (int i = 0; i < 500; i++) {

                                                                   SolidBrush Br = new SolidBrush(Color.FromArgb(R.Next(256),

                                                                                R.Next(256), R.Next(256), R.Next(256)));

                                                                   G.FillEllipse(Br, R.Next(600), R.Next(400), R.Next(70) + 30,

                                                                                R.Next(70) + 30);

                                                     }

                                                     Invalidate();

                                        }

                           }

             }

}

 

Form1ÀÇ ¸â¹ö·Î Bitmap ŸÀÔÀÇ Çʵå B¸¦ ¼±¾ðÇÏ°í Æø 600, ³ôÀÌ 400ÀÇ Å©±â·Î »ý¼ºÇß´Ù. ºñÆ®¸Ê Ç¥¸é¿¡´Â ¾Æ¹«°Íµµ ±×·ÁÁ® ÀÖÁö ¾ÊÀ¸¸ç ¸ðµç Çȼ¿ÀÌ Åõ¸í»öÀ¸·Î ÃʱâÈ­µÈ´Ù. ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» ´©¸£¸é ºñÆ®¸Ê Ç¥¸é¿¡ 500°³ÀÇ Å¸¿øÀ» ¸¶±¸ ±×¸°´Ù. »ö»ó, Å©±â, À§Ä¡ µîÀ» ³­¼ö·Î ¼±ÅÃÇßÀ¸¸ç ¼Óµµ¸¦ ´À¸®°Ô Çϱâ À§ÇØ ¹ÝÅõ¸íÇÑ »ö»óÀ» »ç¿ëÇß´Ù.

FromImage(B) È£Ãâ¿¡ ÀÇÇØ B ºñÆ®¸ÊÀ» Ãâ·Â Ç¥¸éÀ¸·Î °¡Áö´Â Graphics °´Ã¼ G°¡ »ý¼ºµÇ¸ç ÀÌÈÄ GÀÇ ¸Þ¼­µå´Â BÀÇ Ç¥¸é¿¡ Ãâ·ÂÇÑ´Ù. B´Â ¸Þ¸ð¸®»ó¿¡ Àִ ǥ¸éÀÏ »ÓÀ̹ǷΠŸ¿øÀ» ±×¸®´Â °úÁ¤Àº º¸ÀÌÁö ¾Ê´Â´Ù. ¿Ï¼ºµÈ ±×¸²Àº Paint À̺¥Æ®¿¡¼­ È­¸éÀ¸·Î °í¼Ó Àü¼ÛµÇ¸ç »ç¿ëÀÚ´Â ÃÖÁ¾ ¿Ï¼ºµÈ ±×¸²¸¸ º¸°Ô µÈ´Ù. ¸¶¿ì½º ¹öÆ°À» ´©¸¦ ¶§¸¶´Ù Ÿ¿øÀÇ ¸ð¾çÀÌ ¹Ù²ï´Ù.

ÀÌ Ãâ·ÂÀ» Paint À̺¥Æ®¿¡¼­ Á÷Á¢ ÇÏ¸é µÎ °¡Áö ¸é¿¡¼­ ºÒÀÌÀÍÀÌ »ý±ä´Ù. È®ÀÎÇØ º¸±â À§ÇØ Paint À̺¥Æ®¿¡¼­ Á÷Á¢ ±×·Á º¸ÀÚ. ÄÚµå´Â °°µÇ ±×¸®´Â ´ë»óÀÌ e.Graphics¶ó´Â Á¡ÀÌ ´Ù¸£´Ù.

 

private void Form1_Paint(object sender, PaintEventArgs e) {

         e.Graphics.Clear(BackColor);

         Random R = new Random();

 

         for (int i = 0; i < 500; i++) {

                      SolidBrush Br = new SolidBrush(Color.FromArgb(R.Next(256),

                                   R.Next(256), R.Next(256), R.Next(256)));

                       e.Graphics.FillEllipse(Br, R.Next(600), R.Next(400), R.Next(70) + 30,

                                   R.Next(70) + 30);

         }

}

 

ù ¹ø° ¹®Á¦´Â ±×¸²À» ±×¸®´Â Áß°£ °úÁ¤ÀÌ Àû³ª¶óÇÏ°Ô º¸Àδٴ Á¡ÀÌ´Ù. ½Ã°£ÀÌ ¿À·¡ °É¸®´Â °ÍÀº ÇÒ ¼ö ¾øÁö¸¸ Áß°£ °úÁ¤À» º¸ÀÌ´Â °ÍÀº ±×¸® ±ò²ûÇÑ ¸ð½ÀÀÌ ¾Æ´Ï´Ù. ±ô¹ÚÀÓµµ ½ÉÇÏ¸ç »ç¿ëÀÚ´Â ±â´Ù¸°´Ù´Â ´À³¦À» ¹Þ´Â´Ù. »ÐÇÏ°í ÇÑ ¹ø¿¡ ³ªÅ¸³ª´Â °ÍÀ» ´õ ÁÁ¾ÆÇÏ¸ç ¹é±×¶ó¿îµå¿¡¼­ ÀÌ ÀÛ¾÷À» ¹Ì¸® ÇØ ³õÀ¸¸é ´õ ºü¸£°Ô Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.

µÎ ¹ø° ºÒÀÌÀÍÀº ÀÌ¹Ì ¿Ï¼ºÇÑ ±×¸²À» Paint À̺¥Æ®¸¦ ¹ÞÀ» ¶§¸¶´Ù ´Ù½Ã ±×·Á¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. ¾Æ¹«¸® º¹ÀâÇÑ ±×¸²ÀÌ¶óµµ ¸Þ¸ð¸®»óÀÇ ºñÆ®¸Ê¿¡ ¹Ì¸® ÁغñÇØ µÎ¾ú´Ù¸é ´Ù½Ã ±×¸± ¶§ ¿Ï¼ºµÈ ±×¸²¸¸ Àü¼ÛÇϸé ÈξÀ ´õ ºü¸£°Ô ±×¸± ¼ö ÀÖ´Ù.

À§ Äڵ带 ½ÇÇàÇϸé Ÿ¿øÀÌ ¸¶±¸ ±×·ÁÁ® ÁöÀúºÐÇØ º¸ÀÌ¸ç ´Ù¸¥ À©µµ¿ì¿¡ ÀÇÇØ ¾ðÄ¿¹öµÉ ¶§¸¶´Ù ÀÌ °úÁ¤ÀÌ ¹Ýº¹µÇ¹Ç·Î ´À¸®´Ù. °Ô´Ù°¡ ÀÌ ¿¹Á¦´Â ³­¼ö¸¦ »ç¿ëÇÏ°í ÀÖ¾î ±×¸± ¶§¸¶´Ù ´Þ¶óÁø´Ù´Â ¹®Á¦±îÁö ÀÖ´Ù. Áöµµ³ª 3D ±×·¡ÇÈó·³ ¿¬»êÀÌ º¹ÀâÇÑ ÇÁ·Î±×·¥Àº ¸Þ¸ð¸® ºñÆ®¸Ê¿¡ ÇÑ ¹ø¸¸ ±×·Á µÎ°í ´Ù½Ã ±×¸± ¶§´Â °í¼Ó Àü¼ÛÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.

21-1-4.´õºí ¹öÆÛ¸µ

¾Õ Ç׿¡¼­ ¾Ë¾Æº» ¹é±×¶ó¿îµå À̹ÌÁö 󸮸¦ ºü¸¥ ¼Óµµ·Î ¹Ýº¹ÇÏ´Â ±â¹ýÀ» ´õºí ¹öÆÛ¸µÀ̶ó°í Çϴµ¥ ±ô¹ÚÀÓÀ» Á¦°ÅÇÏ´Â ±âº»ÀûÀÌ°íµµ ±Ã±ØÀûÀÎ ±â¼úÀÌ´Ù. ´õºí ¹öÆÛ¸µÀ» ÇÏÁö ¾Ê°í À̹ÌÁö¸¦ ¹Ýº¹ÀûÀ¸·Î ±×¸®¸é ±ô¹ÚÀÓÀÌ ¹ß»ýÇÑ´Ù.

 

DoubleBuffer

using System; ~ using System.Windows.Forms;

 

namespace DoubleBuffer {

             public partial class Form1 : Form {

                           int ex = 10, ey = 100;

                           const int r = 15;

 

                           public Form1() {

                                        InitializeComponent();

                                        timer1.Start();

                           }

 

                           private void Form1_Paint(object sender, PaintEventArgs e) {

                                        int x, y;

 

                                        for (x = 0; x < ClientRectangle.Right; x += 10) {

                                                     e.Graphics.DrawLine(Pens.Black, x, 0, x, ClientRectangle.Bottom);

                                        }

                                        for (y = 0; y < ClientRectangle.Bottom; y += 10) {

                                                     e.Graphics.DrawLine(Pens.Black, 0, y, ClientRectangle.Right, y);

                                        }

 

                                        e.Graphics.FillEllipse(new SolidBrush(Color.LightGreen), ex - r, ey - r, r * 2, r * 2);

                                        e.Graphics.DrawEllipse(new Pen(Color.Blue, 5), ex - r, ey - r, r * 2, r * 2);

                           }

 

                           private void timer1_Tick(object sender, EventArgs e) {

                                        ex += 6;

                                        if (ex > ClientRectangle.Right) ex = 0;

                                        Invalidate();

                           }

             }

}

 

º¹ÀâÇÑ ¹è°æÀÌ ÀÖ´Â »óȲÀ» ¸¸µé±â À§ÇØ ¹ÙµÏÆÇ ¹è°æ ¹«´Ì¸¦ ±ò¾Æ µÎ¾ú´Ù. ÃÊ´ç 20¹ø¾¿ ¹ß»ýÇϴ ŸÀÌ¸Ó À̺¥Æ®¿¡¼­ °øÀÇ x ÁÂÇ¥ÀÎ ex¸¦ 6¾¿ Áõ°¡½ÃÄÑ ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î À̵¿½ÃÅ°¸ç À̶§¸¶´Ù Invalidate¸¦ È£ÃâÇÏ¿© ´Ù½Ã ±×¸°´Ù. Paint À̺¥Æ®¿¡¼­´Â ÀÌÀü °øÀÇ ÀÜ»óÀ» Áö¿ì±â À§ÇØ È­¸éÀ» ¿ÏÀüÈ÷ Áö¿ü´Ù°¡ ¹è°æÀ» ±×¸®°í »õ À§Ä¡¿¡ °øÀ» Ãâ·ÂÇÑ´Ù.

ÀÌ °úÁ¤À» ÃÊ´ç 20¹ø¾¿ ¹Ýº¹ÇÏ´Ù º¸´Ï ÁÖ±âÀûÀ¸·Î È­¸éÀº Áö¿öÁ³´Ù ±×·ÁÁ³´Ù¸¦ ¹Ýº¹ÇÏ¸ç »ç¿ëÀÚ ´«¿¡ Áö¿öÁø È­¸é°ú ±×·ÁÁø È­¸éÀÌ ±³´ë·Î º¸ÀδÙ. Áö¿öÁø È­¸éÀÌ °¡²û º¸ÀÌ´Â ÀÌ Çö»óÀ» ±ô¹ÚÀÓÀ̶ó°í Çϴµ¥ ÆûÀÌ ÀÛÀ» ¶§´Â Àß ´À³¥ ¼ö ¾øÁö¸¸ ÆûÀ» Å©°Ô Çϸé ÈξÀ ´õ ½ÉÇØÁø´Ù. ÆûÀ» ÃÖ´ëÈ­ÇÏ¸é °ÅÀÇ ¸øºÁÁÙ Áö°æÀÌ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ÆûÀÇ DoubleBuffered ÇÁ·ÎÆÛƼ¸¦ true·Î ¹Ù²Ù´Â °ÍÀÌ´Ù. ÀÌ ÇÁ·ÎÆÛƼ¸¦ true·Î ¼³Á¤Çϸé À̹ÌÁö¸¦ ¸Þ¸ð¸®¿¡¼­ ¿ÏÀüÈ÷ ±×¸° ÈÄ È­¸éÀ¸·Î Àü¼ÛÇϹǷΠ±ô¹ÚÀÓÀÌ ¾ø´Ù.

ÀÌ ÇÁ·ÎÆÛƼ´Â Æí¸®ÇÏÁö¸¸ ÇÁ·¹ÀÓ¿öÅ©¿¡ ÀÇÇØ ÀÚµ¿À¸·Î ó¸®ÇÏ´Ù º¸´Ï ´À¸®¸ç ¾ðÄ¿¹öµÉ ¶§³ª º¹±¸µÉ ¶§ µî ´Ù½Ã ±×¸± ÇÊ¿ä°¡ ¾øÀ» ¶§µµ ¿ÏÀüÈ÷ ´Ù½Ã ±×·Á È¿À²ÀûÀÌÁö ¸øÇÏ´Ù. ´ÙÀ½ ÄÚµå´Â Bitmap °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© ¼öµ¿À¸·Î ´õºí ¹öÆÛ¸µÀ» ÇÑ´Ù.

 

DoubleBuffer

namespace DoubleBuffer {

             public partial class Form1 : Form {

                           int ex = 10, ey = 100;

                           const int r = 15;

                           Bitmap B;

 

                           public Form1() {

                                        InitializeComponent();

                                        timer1.Start();

                           }

 

                           private void Form1_Paint(object sender, PaintEventArgs e) {

                                        if (B != null) {

                                                     e.Graphics.DrawImage(B, 0, 0);

                                        }

                           }

 

                           protected override void OnPaintBackground(PaintEventArgs e) {

                                        // ¹è°æ»öÀ¸·Î Áö¿ìÁö ¾ÊÀ½

                           }

 

                           private void timer1_Tick(object sender, EventArgs e) {

                                        int x, y;

 

                                        if (B == null || B.Width != ClientSize.Width || B.Height != ClientSize.Height) {

                                                     B = new Bitmap(ClientSize.Width, ClientSize.Height);

                                        }

 

                                        Graphics G = Graphics.FromImage(B);

                                        G.Clear(SystemColors.Window);

 

                                        ex += 6;

                                        if (ex > ClientRectangle.Right) ex = 0;

 

                                        for (x = 0; x < ClientRectangle.Right; x += 10) {

                                                     G.DrawLine(Pens.Black, x, 0, x, ClientRectangle.Bottom);

                                        }

                                        for (y = 0; y < ClientRectangle.Bottom; y += 10) {

                                                     G.DrawLine(Pens.Black, 0, y, ClientRectangle.Right, y);

                                        }

 

                                        G.FillEllipse(new SolidBrush(Color.LightGreen), ex - r, ey - r, r * 2, r * 2);

                                        G.DrawEllipse(new Pen(Color.Blue, 5), ex - r, ey - r, r * 2, r * 2);

 

                                        Invalidate();

                           }

             }

}

 

ºñÆ®¸Ê Çʵå B´Â nullÀÎ »óÅ·ΠÃʱâÈ­µÇ¸ç ŸÀÌ¸Ó À̺¥Æ®¸¦ óÀ½ ¹Þ¾ÒÀ» ¶§ ÀÛ¾÷¿µ¿ªÀÇ Å©±â·Î ÃʱâÈ­ÇÑ´Ù. ÀÛ¾÷¿µ¿ª Å©±â°¡ ¹Ù²î¸é ºñÆ®¸ÊÀº »õ·Î¿î Å©±â·Î ´Ù½Ã »ý¼ºµÈ´Ù. ÀÛ¾÷¿µ¿ª Å©±â°¡ °íÁ¤µÇ¾î ÀÖ´Ù¸é ÀÌ Ã³¸®¸¦ ¸Å¹ø ÇÒ ÇÊ¿ä´Â ¾ø´Ù.

ºñÆ®¸Ê °´Ã¼ B·ÎºÎÅÍ Graphics °´Ã¼ G¸¦ »ý¼ºÇÏ°í GÀÇ ±×¸®±â ¸Þ¼­µå¸¦ È£ÃâÇÏ¸é ¸ðµç ±×¸®±â´Â ºñÆ®¸Ê °´Ã¼·Î Ãâ·ÂµÈ´Ù. È­¸éÀ» Áö¿ì°Å³ª °øÀÌ À̵¿ÇÏ´Â ¸ð½ÀÀº »ç¿ëÀÚ ´«¿¡ º¸ÀÌÁö ¾ÊÀ¸¸ç µû¶ó¼­ ±ô¹ÚÀÓµµ ÀüÇô ¾ø´Ù. Paint¿¡¼­´Â ŸÀÌ¸Ó À̺¥Æ®¿¡¼­ ¿Ï¼ºÇØ ³õÀº ºñÆ®¸ÊÀ» È­¸éÀ¸·Î °í¼Ó Àü¼ÛÇÏ¸é µÈ´Ù. ¾ðÄ¿¹öµÉ ¶§³ª º¹±¸µÉ ¶§´Â ºñÆ®¸ÊÀ» ´Ù½Ã ±×¸± ÇÊ¿ä ¾øÀÌ ÁغñµÈ ºñÆ®¸Ê¸¸ ÀçÀü¼ÛÇÑ´Ù.

Invalidate ¸Þ¼­µå´Â ¹«Á¶°Ç È­¸éÀ» Áö¿î ÈÄ ´Ù½Ã ±×¸®´Âµ¥ ÀÌ·¸°Ô ÇÏ¸é ´õºí ¹öÆÛ¸µÀ» Çϳª ¸¶³ªÀÌ´Ù. ±×·¡¼­ È­¸éÀ» Áö¿ìÁö ¾Êµµ·Ï OnPaintBackground¸¦ ÀçÁ¤ÀÇÇÏ¿© ¾Æ¹«°Íµµ ÇÏÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. ¹è°æÀ» Áö¿ìÁö ¾ÊÀ¸¸é ¹«Á¶°Ç µ¤¾î¼­ ±×¸®¹Ç·Î Áö¿öÁø È­¸éÀÌ º¸ÀÏ °Ü¸¦ÀÌ ¾ø´Ù.

21-1-5.¸ÞŸ ÆÄÀÏ

À̹ÌÁö¸¦ ÀúÀåÇÏ´Â ¹æ½ÄÀº Å©°Ô ·¡½ºÅÍ¿Í º¤ÅÍ µÎ °¡Áö·Î ±¸ºÐµÈ´Ù. ·¡½ºÅÍ À̹ÌÁö´Â Á¡ÀÇ ÁýÇÕÀ¸·Î À̹ÌÁöÀÇ ¸ð¾çÀ» ±â¾ïÇÏ´Â ¹æ½ÄÀ¸·Î¼­ BMP, JPG µî ÈçÈ÷ ¿ì¸®°¡ »ç¿ëÇÏ´Â ±×·¡ÇÈ ÆÄÀÏÀÌ ÀÌ ¹æ½ÄÀ» »ç¿ëÇÑ´Ù. À̹ÌÁö¸¦ ÀúÀåÇÏ´Â ¹æ½ÄÀÌ ºñµð¿À ·¥ÀÇ ¹°¸®ÀûÀÎ ±¸Á¶¿Í À¯»çÇØ Ãâ·Â ¼Óµµ°¡ ºü¸£°í ¾ó¸¶µçÁö º¹ÀâÇÑ À̹ÌÁöµµ Ç¥ÇöÇÒ ¼ö ÀÖ´Ù.

ÀÌ¿¡ ºñÇØ º¤ÅÍ´Â À̹ÌÁö¸¦ ±×¸®´Â ¸í·ÉÀ» ºÎȣȭÇÏ¿© ÀúÀåÇÏ´Â ¹æ½ÄÀÌ¸ç ¸í·ÉÀ» ¼ø¼­´ë·Î Àç»ýÇÏ¿© ¿ø·¡ÀÇ À̹ÌÁö¸¦ º¹¿øÇÑ´Ù. ¸í·ÉÀ» Àç»ýÇÒ ¶§ ÀÏÁ¤ÇÑ ºñÀ²À» °öÇÏ¿© À̹ÌÁö ¼Õ»ó¾øÀÌ È®´ëÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ °¢ µµÇüÀ» ±×¸®´Â ¸í·ÉÀÌ ºÎȣȭµÇ¾î ÀÖ¾î °³º° µµÇüÀ» ºÐ¸®ÇÏ¿© ÆíÁýÇÒ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ »çÁø°°Àº Á¤±³ÇÑ À̹ÌÁö¸¦ Ç¥ÇöÇϱ⿡´Â ÀûÇÕÇÏÁö ¾ÊÀ¸¸ç ¸í·ÉÀ» ÀÏÀÏÀÌ Àç»ýÇØ¾ß ÇϹǷΠ´À¸®´Ù.

GDI+¿¡¼­ º¤ÅÍ À̹ÌÁö¸¦ Ç¥ÇöÇϴ Ŭ·¡½º´Â MetafileÀ̸ç Image·ÎºÎÅÍ ÆÄ»ýµÈ´Ù. ÀÌ Å¬·¡½º´Â System.Drawing.Imaging ³×ÀÓ½ºÆäÀ̽º¿¡ Á¤ÀǵǾî ÀÖ´Ù. ÆÄÀϷκÎÅÍ ÀоîµéÀÏ ¼ö ÀÖÁö¸¸ ÄÚµå·Î Á÷Á¢ »ý¼ºÇÒ ¼öµµ À־ »ý¼ºÀÚ°¡ ¹«·Á 39°³³ª Á¦°øµÈ´Ù. ÀÏ´Ü ¸ÞŸ ÆÄÀϷκÎÅÍ ÀоîµéÀÌ´Â »ý¼ºÀÚ¸¸ ¾Ë¾Æº¸ÀÚ.

 

public Metafile (string filename)

 

Àμö·Î ¸ÞŸ ÆÄÀÏÀÇ °æ·Î¸¦ Àü´ÞÇÑ´Ù. ¸ÞŸ ÆÄÀϵµ ¿©·¯ Á¾·ù°¡ Àִµ¥ 16ºñÆ® ¸ÞŸ ÆÄÀÏÀº È®ÀåÀÚ wmf¸¦ °¡Áö¸ç 32ºñÆ® ¸ÞŸ ÆÄÀÏ°ú GDI+¿¡¼­ È®ÀåµÈ EMF+´Â emf È®ÀåÀÚ¸¦ °¡Áø´Ù. ¸ÞŸ ÆÄÀÏÀº Ŭ¸³¾ÆÆ®·Î ¸¹ÀÌ Á¦°øµÇ¹Ç·Î ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Ù. Áö±Ý ´çÀå ¿©·¯ºÐÀÇ Çϵåµð½ºÅ©¸¦ µÚÁ® º¸¸é ÃÖ¼ÒÇÑ ¼ö¹é°³´Â ¹ß°ßµÈ´Ù.

¸ÞŸ ÆÄÀϵµ ÀÏÁ¾ÀÇ ImageÀ̹ǷΠºñÆ®¸Ê°ú ¸¶Âù°¡Áö·Î DrawImage ¸Þ¼­µå·Î Ãâ·ÂÇÏ¸ç ¾î¶² ¸Þ¼­µå¸¦ È£ÃâÇϴ°¡¿¡ µû¶ó È®´ë, Ãà¼Ò °¡´ÉÇÏ´Ù. ´ÙÀ½ ¿¹Á¦´Â ³ªºñ ¸ð¾çÀÇ ¸ÞŸ ÆÄÀÏÀ» ÀÛ¾÷¿µ¿ª¿¡ °¡µæ ä¿ö Ãâ·ÂÇÑ´Ù.

 

MetaTest

using System; ~ using System.Windows.Forms;

using System.Drawing.Imaging;

 

namespace MetaTest {

             public partial class Form1 : Form {

                           Metafile M;

 

                           public Form1() {

                                        InitializeComponent();

                                        M = new Metafile("buttrfly.wmf");

                                        SetStyle(ControlStyles.ResizeRedraw, true);

                           }

 

                           private void Form1_Paint(object sender, PaintEventArgs e) {

                                        e.Graphics.DrawImage(M, ClientRectangle);

                           }

             }

}

 

Metafile ŸÀÔÀÇ Çʵå MÀ» ¼±¾ðÇÏ°í »ý¼ºÀÚ¿¡¼­ buttrfly.wmf ¸ÞŸ ÆÄÀÏÀ» Àоîµé¿´´Ù. ÀÌ ¿¹Á¦°¡ Á¦´ë·Î ½ÇÇàµÇ·Á¸é ½ÇÇà ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ͸®¿¡ ¸ÞŸ ÆÄÀÏÀÌ Á¸ÀçÇØ¾ß ÇÑ´Ù. MetafileÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÏ´Â ´ë½Å Image Ŭ·¡½ºÀÇ FromFile Á¤Àû ¸Þ¼­µå·Î ÀÐÀ» ¼öµµ Àִµ¥ À̶§´Â Image ŸÀÔÀÇ °´Ã¼°¡ ¸®ÅϵȴÙ.

Paint À̺¥Æ®¿¡¼­´Â M ¸ÞŸ ÆÄÀÏÀ» ÀÛ¾÷¿µ¿ªÀÇ Å©±â¸¸Å­ °¡µæ Ãâ·ÂÇß´Ù. ÆûÀÇ Å©±â¸¦ º¯°æÇÏ¸é ³ªºñµµ °°ÀÌ Ä¿Áö´Âµ¥ ÀÌ·¸°Ô µÇ±â À§Çؼ­´Â ÆûÀÇ Å©±â°¡ º¯°æµÉ ¶§¸¶´Ù ÀÚµ¿À¸·Î ¹«È¿È­µÇµµ·Ï ResizeRedraw ½ºÅ¸ÀÏÀ» ÁöÁ¤ÇØ µÎ¾î¾ß ÇÑ´Ù. ÆûÀÇ Å©±â¸¦ º¯°æÇØ º¸ÀÚ.

  

ÆûÀ» ¾Æ¹«¸® È®´ëÇصµ °è´Ü Çö»óÀÌ »ý±âÁö ¾ÊÀ¸¸ç ¹Ì·ÁÇÏ´Ù. ÀÌ°ÍÀÌ º¤ÅÍ ±×·¡ÇÈÀÇ ÀåÁ¡ÀÌ´Ù. ¸ÞŸ ÆÄÀÏ¿¡ ´ëÇؼ­µµ ¿¬±¸ÇØ º¸ÀÚ¸é ÇÒ ¾ê±â°¡ ¾ÆÁÖ ¸¹Áö¸¸ ´å³Ý°ú´Â Á÷Á¢ÀûÀÎ ¿¬°ü¼ºÀÌ ¶³¾îÁö¹Ç·Î Ãâ·Â ¹æ¹ý Á¤µµ¸¸ ¼Ò°³ÇÑ´Ù.