¸Þ¸ð¸®»ó¿¡¼ »ý¼ºÇÑ À̹ÌÁö¸¦ ÆÄÀÏ·Î ¸¸µé ¼ö ÀÖ°í ÆÄÀϷκÎÅÍ ÀÐÀº À̹ÌÁö¸¦ ¿øº»°ú ´Ù¸¥ Æ÷¸ËÀ¸·Î º¯È¯ÇÒ ¼öµµ
ÀÖ´Ù. ¾îÂ÷ÇÇ ±×·¡ÇÈ Æ÷¸ËÀº ¾ÐÃà ¹æ½ÄÀÌ Á¶±Ý¾¿ ´Ù¸¦ »Ó ÀúÀåÇÏ´Â ´ë»óÀº µ¿ÀÏÇϹǷΠ»óÈ£ º¯È¯ÇÒ ¼ö
ÀÖ´Ù. ÀúÀå ¸Þ¼µå´Â ´ÙÀ½ µÎ °¡Áö°¡ Á¦°øµÈ´Ù. ÆÄÀϷκÎÅÍ
À̹ÌÁö °´Ã¼¸¦ »ý¼ºÇÏ´Â FromFileÀÇ ¹Ý´ëµÇ´Â ¸Þ¼µåÀÌ´Ù.
public void Save (string filename [, ImageFormat
format])
public void Save (string filename, ImageCodecInfo
encoder, EncoderParameters encoderParams)
ù ¹ø° Save ¸Þ¼µå´Â ÀúÀåÇÒ ÆÄÀÏÀÇ °æ·Î¿Í À̹ÌÁö Æ÷¸ËÀ» ÁöÁ¤ÇÏ´Â ImageFormatÀ» Àμö·Î ¹Þ´Â´Ù. Æ÷¸ËÀ» »ý·«ÇÏ¸é µðÆúÆ® Æ÷¸ËÀÎ PNG·Î ÀúÀåÇÑ´Ù. ImageFormat °´Ã¼´Â À̹ÌÁö Æ÷¸ËÀÇ IDÀÎ GUID¸¦ ÅëÇØ »ý¼ºÇϴµ¥ ÀÏÀÏÀÌ Á¶»çÇÏ·Á¸é ¹ø°Å·Î¿ì¹Ç·Î Àß
¾Ë·ÁÁø Æ÷¸ËÀº Á¤Àû ÇÁ·ÎÆÛƼ¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù. ÇÁ·ÎÆÛƼ ¸íÀÌ °£´ÜÇϹǷΠµµÇ¥·Î Á¤¸®ÇÏÁö´Â ¾Ê°í
À̸§¸¸ ³ª¿ÇÑ´Ù.
Bmp, Emf, Exif, Gif, Icon, Jpeg, MemoryBmp, Png,
Tiff, Wmf
ÀÌ ÇÁ·ÎÆÛƼ´Â ÇØ´ç Æ÷¸ËÀ» °¡¸®Å°´Â ImageFormat °´Ã¼¸¦ »ý¼ºÇÏ¿©
¸®ÅÏÇϹǷΠSave ¸Þ¼µåÀÇ µÎ ¹ø° Àμö·Î ¹Ù·Î ¾µ ¼ö ÀÖ´Ù. ´ÙÀ½
¹®ÀåÀº Picture À̹ÌÁö °´Ã¼¸¦ Girl.jpg·Î ÀúÀåÇÑ´Ù.
Picture.Save("Girl.jpg",
ImageFormat.Jpeg);
µÎ ¹ø° Save ¸Þ¼µå´Â ´õ Àú¼öÁØÀÌ¸ç »ó¼¼ÇÑ ¿É¼ÇÀ» ÁöÁ¤ÇÑ´Ù. À̹ÌÁö¸¦ ¾ÐÃàÇÒ ÄÚµ¦ °´Ã¼¿Í ÄÚµ¦ÀÌ »ç¿ëÇÒ ÆĶó¹ÌÅ͸¦ Àü´ÞÇÑ´Ù. BMP´Â
°£´ÜÇؼ º°µµÀÇ ÆĶó¹ÌÅÍ°¡ ÇÊ¿ä ¾øÁö¸¸ JPG °°Àº ¼Õ½Ç ¾ÐÃà Æ÷¸ËÀº ¾ÐÃà·üÀ̳ª ½ºÄµ ¶óÀÎ ¹èÄ¡ °°Àº
¿É¼ÇÀ» ÆĶó¹ÌÅÍ·Î ÁöÁ¤ÇÑ´Ù. ¾ÐÃà·ü¿¡ µû¶ó À̹ÌÁöÀÇ Å©±â¿Í Ç°Áú¿¡ »ó´çÇÑ Â÷ÀÌ°¡ ¹ß»ýÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â JPG ÆÄÀÏÀ» Àоî
BMP·Î º¯È¯ÇÑ´Ù.
Jpg2Bmp |
using
System; ~ using System.Windows.Forms; using
System.IO; using
System.Drawing.Imaging; namespace
Jpg2Bmp { public
partial class Form1 : Form { public
Form1() { InitializeComponent(); } private
void button1_Click(object sender, EventArgs e) { if
(openFileDialog1.ShowDialog() == DialogResult.OK) { string
OldFile = openFileDialog1.FileName; string
NewFile = Path.ChangeExtension(OldFile, "bmp"); Image
Jpg = Image.FromFile(OldFile); Jpg.Save(NewFile,
ImageFormat.Bmp); MessageBox.Show(OldFile
+ "À» BMP·Î º¯È¯Çß½À´Ï´Ù.",
"¾Ë¸²"); } } } } |
Æû Áß¾ÓÀÇ ¹öÆ°À» ´©¸£¸é ÆÄÀÏ ¿±â ´ëÈ»óÀÚ¸¦ ¿¾î º¯È¯ÇÒ JPG ÆÄÀÏÀÇ
°æ·Î¸¦ ÀԷ¹޴´Ù. ÀÌ °æ·ÎÀÇ ÆÄÀÏÀ» FromFile ¸Þ¼µå·Î
ÀÐÀ¸¸é ¾ÐÃàÀ» Ç®¾î À̹ÌÁö °´Ã¼¸¦ »ý¼ºÇϸç È®ÀåÀÚ¸¸ bmp·Î º¯°æÇÏ¿©
Save ¸Þ¼µå·Î ÀúÀåÇÑ´Ù. 2MÀÇ JPG ÆÄÀÏÀ»
¾ÐÃàÇÏÁö ¾ÊÀº BMP·Î º¯È¯ÇÏ¸é ¹«·Á 14M·Î ´Ã¾î³´Ù.
¿©±â¼´Â JPG¸¦ BMP·Î
º¯È¯ÇÏ´Â Äڵ常 ÀÛ¼ºÇØ ºÃ´Âµ¥ ÀÌ Äڵ带 ±×´ë·Î µû¶óÇϸé ÀÓÀÇÀÇ Æ÷¸ËÀ» ´Ù¸¥ Æ÷¸ËÀ¸·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù. ÀÐÀ»
¶§´Â FromFile ¸Þ¼µå°¡ ¾Ë¾Æ¼ Æ÷¸ËÀ» ÆǺ°ÇÏ°í ÀúÀåÇÒ ¶§
ImageFormat °´Ã¼¸¸ ¿øÇÏ´Â °ÍÀ¸·Î ÁöÁ¤ÇÏ¸é µÈ´Ù. ¹°·Ð È®ÀåÀÚ´Â Àû´çÈ÷ ¹Ù²ã¾ß
ÇÑ´Ù.
GDI+´Â À̹ÌÁö¸¦ ÆíÁýÇϰųª º¯ÇüÇÏ´Â ¸Þ¼µå¸¦ Á¦°øÇÑ´Ù. Æ÷Åä¼¥ ¼öÁØÀÇ ¼¶¼¼ÇÑ ÆíÁý ±â´ÉÀº ¾Æ´ÏÁö¸¸ »ö»óÀ» Á¶±Ý ¹Ù²Û´Ù°Å³ª ȸÀü, ¹ÝÀüÇÏ´Â
°£´ÜÇÑ µ¿ÀÛÀº °¡´ÉÇÏ´Ù. GDI+ÀÇ ÆíÁý ±â´ÉÀº À̹ÌÁö ÀÚü¿¡ Àû¿ëµÇ´Â °Íµµ ÀÖÁö¸¸ ´ëºÎºÐÀº Ãâ·ÂÇÒ
¶§ Àû¿ëµÈ´Ù. ´ÙÀ½Àº DrawImage ¸Þ¼µåÀÇ ¶Ç ´Ù¸¥
¹öÀüÀÌ´Ù.
public void DrawImage (Image image,Rectangle
destRect,int srcX,int srcY,int srcWidth,int srcHeight,GraphicsUnit
srcUnit,ImageAttributes imageAttr)
ÀÌ ¸Þ¼µåÀÇ ¸¶Áö¸· Àμö·Î Àü´ÞµÇ´Â ImageAttribute °´Ã¼´Â
À̹ÌÁö¸¦ ±×¸®´Â µ¿¾È Àû¿ëÇÒ È¿°ú¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ °´Ã¼ÀÇ ¸Þ¼µå¸¦ È£ÃâÇÏ¿© À̹ÌÁöÀÇ ¸ð¾ç¿¡ º¯È¸¦ ÁØ´Ù. ±â´ÉÀÌ ¸¹À¸¹Ç·Î ÀÏ´Ü ¿¹Á¦¸¦ ±¸°æÇØ º¸°í ÆíÁý ¹æ¹ýÀ» °³º°ÀûÀ¸·Î ¿¬±¸ÇØ º¸ÀÚ.
ImageAttr |
using
System; ~ using System.Windows.Forms; using
System.Drawing.Imaging; namespace
ImageAttr { public
partial class Form1 : Form { Image
Src = Image.FromFile("¿À¼Ö±æ.jpg"); ImageAttributes
Attr = new ImageAttributes(); float
Threshold = 0.5f; float
Gamma = 1.0f; float
Bright = 0.0f; public
Form1() { InitializeComponent(); } private
void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawImage(Src,
new Rectangle(0, 0, Src.Width, Src.Height), 0,
0, Src.Width, Src.Height, GraphicsUnit.Pixel, Attr); } private
void Form1_KeyDown(object sender, KeyEventArgs e) { switch
(e.KeyCode) { //
¸®¼Â case
Keys.Space: Attr
= new ImageAttributes(); Src
= Image.FromFile("¿À¼Ö±æ.jpg"); Threshold
= 0.5f; Gamma
= 1.0f; Bright
= 0.0f; break; //
½Ã°è ¹æÇâ ȸÀü case
Keys.Right: Src.RotateFlip(RotateFlipType.Rotate90FlipNone); break; //
¹Ý½Ã°è ¹æÇâ ȸÀü case
Keys.Left: Src.RotateFlip(RotateFlipType.Rotate270FlipNone); break; //
¼öÆò µÚÁý±â case
Keys.Up: Src.RotateFlip(RotateFlipType.RotateNoneFlipX); break; //
¼öÁ÷ µÚÁý±â case
Keys.Down: Src.RotateFlip(RotateFlipType.RotateNoneFlipY); break; //
½º·¹½Ã Ȧµå Áõ°¨ case
Keys.Q: if
(Threshold < 1) Threshold += 0.1f; Attr.SetThreshold(Threshold); break; case
Keys.W: if
(Threshold > 0) Threshold -= 0.1f; Attr.SetThreshold(Threshold); break; //
°¨¸¶ Áõ°¨ case
Keys.E: if
(Gamma < 5.0) Gamma += 0.1f; Attr.SetGamma(Gamma); break; case
Keys.R: if
(Gamma > 0.1) Gamma -= 0.1f; Attr.SetGamma(Gamma); break; //
¹à°Ô case
Keys.D1: if
(Bright < 1.0f) Bright += 0.1f; float[][]
M1 = { new
float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, new
float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, new
float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, new
float[] {0.0f, 0.0f, 0.0f, 1.0f, 0.0f}, new
float[] {Bright, Bright, Bright, 0.0f, 1.0f}, }; ColorMatrix
Mat1 = new ColorMatrix(M1); Attr.SetColorMatrix(Mat1); break; //
¾îµÓ°Ô case
Keys.D2: if
(Bright > -1.0f) Bright -= 0.1f; float[][]
M2 = { new
float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, new
float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, new
float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, new
float[] {0.0f, 0.0f, 0.0f, 1.0f, 0.0f}, new
float[] {Bright, Bright, Bright, 0.0f, 1.0f}, }; ColorMatrix
Mat2 = new ColorMatrix(M2); Attr.SetColorMatrix(Mat2); break; //
¹ÝÀü case
Keys.D3: float[][]
M3 = { new
float[] {-1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, new
float[] {0.0f, -1.0f, 0.0f, 0.0f, 0.0f}, new
float[] {0.0f, 0.0f, -1.0f, 0.0f, 0.0f}, new
float[] {0.0f, 0.0f, 0.0f, 1.0f, 0.0f}, new
float[] {1.0f, 1.0f, 1.0f, 0.0f, 1.0f}, }; ColorMatrix
Mat3 = new ColorMatrix(M3); Attr.SetColorMatrix(Mat3); break; //
±×·¹ÀÌ ½ºÄÉÀÏ case
Keys.D4: float[][]
M4 = { new
float[] {0.299f, 0.299f, 0.299f, 0.0f, 0.0f}, new
float[] {0.587f, 0.587f, 0.587f, 0.0f, 0.0f}, new
float[] {0.114f, 0.114f, 0.114f, 0.0f, 0.0f}, new
float[] {0.0f, 0.0f, 0.0f, 1.0f, 0.0f}, new
float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, }; ColorMatrix
Mat4 = new ColorMatrix(M4); Attr.SetColorMatrix(Mat4); break; case
Keys.D5: ColorMap[]
Map = new ColorMap[1]; Map[0]
= new ColorMap(); Map[0].OldColor
= Color.White; Map[0].NewColor
= Color.Blue; Attr.SetRemapTable(Map); break; } Invalidate(); } } } |
ÇÑÀûÇÑ ¿À¼Ö±æ »çÁøÀÌ Æû¿¡ Ãâ·ÂµÇ´Âµ¥ Ãáõ ÁßµµÀÇ ¾î´À º½³¯ ¸ð½ÀÀÌ´Ù. È¿°ú¸¦
Àû¿ëÇÒ ¶§¸¶´Ù »çÁøÀÌ ¹ø½°Å¸± ¼ö ÀÖ¾î DoubleBuffered ÇÁ·ÎÆÛƼ¸¦ true·Î º¯°æÇØ µÎ¾ú´Ù.
Ä¿¼ À̵¿Å°¿Í 1, 2, 3, 4, 5Å°, q, w, e, rÅ°¸¦ ´·¯ º¸¸é ÀÌ »çÁøÀ» ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î º¯ÇüÇÏ¸ç ½ºÆäÀ̽º Å°´Â ¿ø·¡´ë·Î ¸®¼ÂÇÑ´Ù. ÇÑ ¿¹Á¦¿¡ ¿©·¯ °¡Áö È¿°ú¸¦ µ¿½Ã¿¡ ±¸ÇöÇÏ´Ù º¸´Ï ÀÎÅÍÆäÀ̽º°¡ Á¶±Ý ºÒÆíÇÏ´Ù.
Image Ŭ·¡½ºÀÇ ´ÙÀ½ ¸Þ¼µå´Â À̹ÌÁö¸¦ ȸÀü½ÃÅ°°Å³ª ¹Ý»çµÈ ¸ð¾çÀ¸·Î
¸¸µç´Ù. ÀÌ ±â´ÉÀº Ãâ·ÂÇÒ ¶§ Àû¿ëµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó À̹ÌÁö ÀÚü¿¡ Àû¿ëµÈ´Ù.
public void RotateFlip (RotateFlipType
rotateFlipType)
Àμö·Î ȸÀü ¹× ¹Ý»ç µ¿ÀÛÀ» ÁöÁ¤Çϴµ¥ 90µµ, 180µµ, 270µµ·Î ȸÀüÇÒ ¼ö ÀÖ°í ¼öÆò, ¼öÁ÷À¸·Î ¹Ý»çµÈ ¸ð¾çÀ» ¸¸µé ¼ö ÀÖ´Ù. ȸÀü ¹× ¹Ý»ç¸¦ ÇѲ¨¹ø¿¡
ÁöÁ¤Çϱâ À§ÇÑ ¿°Å°ªµµ ¸¹ÀÌ Àִµ¥ Çö½ÇÀûÀ¸·Î ¿¹Á¦¿¡ »ç¿ëµÈ 4°¡Áö ¿°Å°ª Á¤µµ¸¸ ¾Ë¾Æ µÎ¸é µÈ´Ù. Á¿ì Ä¿¼Å°´Â ½Ã°è, ¹Ý½Ã°è ¹æÇâÀ¸·Î ȸÀü½ÃÅ°¸ç »óÇÏ Ä¿¼Å°´Â ¼öÆò, ¼öÁ÷À¸·Î ¹Ý»ç½ÃŲ´Ù. ´ÙÀ½ ±×¸²Àº ½Ã°è ¹æÇâÀ¸·Î 90µµ ȸÀü½ÃŲ °Í°ú ¼öÁ÷À¸·Î ¹Ý»ç½ÃŲ °ÍÀÌ´Ù.
À̹ÌÁö ȸÀü ±â´ÉÀº ±²ÀåÈ÷ ½Ç¿ëÀûÀε¥ ƯÈ÷ µðÁöÅÐ Ä«¸Þ¶ó¸¦ ¼¼·Î·Î ¼¼¿ö ÂïÀº »çÁøÀ» µ¹¸± ¶§ ¾µ¸¸ÇÏ´Ù. À̹ÌÁö¸¦ ¿ø·¡´ë·Î µÇµ¹¸®·Á¸é ¾ðÁ¦µçÁö ½ºÆäÀ̽º Å°¸¦ ´©¸¥´Ù.
½º·¹½Ã Ȧµå¶õ ÀÓ°èÄ¡¸¦ ±âÁØÀ¸·Î »ö»ó ¿ä¼Ò¸¦ 0À̳ª 255·Î ³»¸² ¶Ç´Â ¿Ã¸²ÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½ ¸Þ¼µå·Î ½º·¹½Ã Ȧµå¸¦
ÁöÁ¤ÇÑ´Ù. ¿¹Á¦¿¡¼´Â Q, WÅ°¸¦ ´·¯ ÀÓ°èÄ¡¸¦ 10%¾¿ Áõ°¨½ÃŲ´Ù.
public void SetThreshold (float threshold)
ÀÓ°èÄ¡´Â 0.0 ~ 1.0±îÁöÀÇ °ªÀ» °¡Áø´Ù. 0Àº »ö»ó ¿ä¼Ò°¡ ÀüÇô ¾ø´Â °ÍÀ» ÀǹÌÇÏ°í 1.0À̸é ÃÖ´ë °µµÀÎ 255¸¦ ÀǹÌÇÑ´Ù. GDI+´Â »ö»óÀÇ °µµ¸¦ Ç¥ÇöÇÒ ¶§ 0 ~ 255±îÁöÀÇ Á¤¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í ´ë½Å 0.0 ~ 1.0 »çÀÌÀÇ
½Ç¼ö¸¦ »ç¿ëÇÑ´Ù. °¢ »ö»ó ¿ä¼Ò°¡ ÀÓ°èÄ¡º¸´Ù ÀÛÀ¸¸é 0ÀÌ
µÇ°í ÀÓ°èÄ¡º¸´Ù Å©¸é 255°¡ µÇ¾î À̹ÌÁöÀÇ »ö»óÀÌ ´Ü¼øÇØÁø´Ù.
¿¹¸¦ µé¾î ÀÓ°èÄ¡°¡ 0.5¶ó¸é
128ÀÌ ±âÁØ°ªÀÌ µÇ¸ç ÀÌ °ªÀ» ±âÁØÀ¸·Î ¸ðµç »ö»ó ¿ä¼Ò°¡ 0 ¶Ç´Â 255·Î ¹Ù²ï´Ù. ¾î¶² Á¡ÀÇ »ö»óÀÌ
(100, 150, 200)À̶ó¸é 128º¸´Ù ÀÛÀº 100Àº 0ÀÌ µÇ°í 128º¸´Ù Å« 150°ú 200Àº 255°¡ µÇ¾î (0,
255, 255)À¸·Î ¹Ù²ï´Ù. ½º·¹½Ã Ȧµå¸¦ ÁöÁ¤ÇÑ ÈÄ ¸ðµç Á¡ÀÇ »ö»ó ¿ä¼Ò´Â 0 ¾Æ´Ï¸é 255·Î ¹Ù²î¹Ç·Î °ËÁ¤»ö,
Èò»ö, »¡°£»ö, ³ë¶õ»ö °°Àº ¿ø»ö¸¸ ³²´Â´Ù. ´ÙÀ½Àº WÅ°¸¦ µÎ ¹ø ´·¯ ÀÓ°èÄ¡
0.3À» Àû¿ëÇÑ °ÍÀÌ´Ù.
0.3Àº ´ë·« 76Àε¥
»ö»ó ¿ä¼Ò Áß À̺¸´Ù ÀÛÀº °ªÀº 0ÀÌ µÇ°í Å« °ªÀº 255°¡
µÈ´Ù. ÀÓ°èÄ¡°¡ ÀÛÀ»¼ö·Ï Èò»öÂÊÀ¸·Î À̵¿ÇÒ È®·üÀÌ ³ô¾Æ ¹à¾ÆÁö¸ç ÀÓ°èÄ¡°¡ Å©¸é ´ëºÎºÐÀÇ »ö»óÀÌ °ËÁ¤»ö
ÂÊÀ¸·Î À̵¿ÇØ ¾îµÎ¿öÁø´Ù. À̹ÌÁöÀÇ ±¸Á¶°¡ ´Ü¼øÇØÁ® Æ÷½ºÅÍ°°Àº È¿°ú¸¦ ³½´Ù.
°¨¸¶´Â À̹ÌÁöÀÇ ¹à±â¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â °ªÀÌ¸ç °¨¸¶ °ª¿¡ µû¶ó À̹ÌÁöÀÇ ¹à±â³ª ´ëºñ¿¡ º¯È°¡ ¹ß»ýÇÑ´Ù. ´ÙÀ½ ¸Þ¼µå·Î °¨¸¶¸¦ ÁöÁ¤ÇÑ´Ù.
public void SetGamma (float gamma)
¿¹Á¦¿¡¼´Â E, R Å°·Î °¨¸¶¸¦ Áõ°¨½ÃÅ°´Âµ¥ °¨¸¶°¡ Áõ°¡Çϸé À̹ÌÁö°¡
¾îµÎ¿öÁö°í °¨¼ÒÇÏ¸é ¹à¾ÆÁø´Ù. ´ÙÀ½Àº °¨¸¶ 1.8°ú 0.4¸¦ Àû¿ëÇÑ °ÍÀÌ´Ù. °¨¸¶´Â ¸ðÁ¾ÀÇ °ø½ÄÀ» Àû¿ëÇÏ¿© À̹ÌÁöÀÇ °¢
Çȼ¿À» Á¶Á¤ÇÑ´Ù.
À̹ÌÁöÀÇ »ö»óÀ» °³º°ÀûÀ¸·Î º¯°æÇÒ ¶§´Â »ö»ó ¸ÅÆ®¸¯½º¸¦ »ç¿ëÇÑ´Ù. ¼öÇÐÀû
°è»êÀÌ µé¾î°¡Áö¸¸ ´Ü¼øÇÑ ´ÙÇ×½ÄÀÏ »ÓÀÌ´Ù. »ö»ó ¸ÅÆ®¸¯½º¸¦ ÁöÁ¤ÇÏ´Â ¸Þ¼µå´Â ´ÙÀ½°ú °°´Ù.
public void SetColorMatrix (ColorMatrix
newColorMatrix)
ColorMatrix °´Ã¼¸¦ »ý¼ºÇÑ ÈÄ Àμö·Î Àü´ÞÇÑ´Ù. ColorMatrix´Â 5Çà 5¿ÀÇ
½Ç¼ö Çà·ÄÀÌ¸ç ¿øº» »ö»ó¿¡ Àû¿ëÇÏ¿© °á°ú »ö»óÀ» ¸¸µé¾î³½´Ù. GDI+ÀÇ »ö»ó ¸ðµ¨Àº RGBA ³×°¡Áö ¿ä¼Ò·Î °áÁ¤µÇÁö¸¸ ¿©±â¿¡ ´õ¹Ì°ª Çϳª¸¦ ´õÇØ 5*5 Çà·ÄÀ»
Á¤ÀÇÇÏ°í ¿øº» »ö»ó¿¡ Çà·ÄÀ» °öÇÏ¸é °á°ú »ö»óÀ» ¸¸µå´Â ´Ù¼¸ °³ÀÇ ¹æÁ¤½ÄÀÌ µµÃâµÈ´Ù. ¿øº» »ö»ó (r1,g1,b1,a1,d1)¿¡ ´ëÇØ 5*5 Çà·ÄÀ» °öÇÏ¸é °á°ú »ö»ó (r2,g2,b2,a2,d2)°¡ ³ª¿Â´Ù.
ÀÔ·Â »ö»óÀÇ d1Àº Ç×»ó 1ÀÌ°í m04~m34±îÁö´Â Ç×»ó 0À̸ç
m44´Â Ç×»ó 1À̹ǷΠÃâ·Â »ö»óÀÇ d2µµ Ç×»ó 1ÀÌ´Ù. ÀÌ °ªÀº ¾îµð±îÁö³ª °è»êÀ» µµ¿ÍÁÖ´Â º¸Á¶°ªÀÌ´Ù. °á°ú »ö»óÀº ´ÙÀ½°ú °°Àº ¹æÁ¤½ÄÀ¸·Î °è»êµÈ´Ù.
r2=r1*m00 + g1*m10 + b1*m20 + a1*m30 + m40
g2=r1*m01 + g1*m11 + b1*m21 + a1*m31 + m41
b2=r1*m02 + g1*m12 + b1*m22 + a1*m32 + m42
a2=r1*m03 + g1*m13 + b1*m23 + a1*m33 + m43
d2=r1*m04 + g1*m14 + b1*m24 + a1*m34 + m44 = 1
°á°ú»ö r2¸¦ °áÁ¤Çϴµ¥ ¿øº» »ö»óÀÇ r1, g1, b1, a1ÀÌ ¸ðµÎ ¿µÇâÀ» ¹ÌÄ¡¸ç °¢ »ö»ó ¿ä¼Ò°¡ r2¿¡
¿µÇâÀ» ¹ÌÄ¡´Â °¡ÁßÄ¡°¡ Çà·Ä ¿ä¼ÒÀÇ °ª¿¡ ÀÇÇØ °áÁ¤µÈ´Ù. ³ª¸ÓÁö
g2, b2, a2µµ ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î °áÁ¤µÈ´Ù. ¸¸¾à ´ë°¢¼± ¹æÇ⸸ 1ÀÌ°í ³ª¸ÓÁö´Â ¸ðµÎ 0ÀÎ ´ÜÀ§ Çà·ÄÀ̶ó¸é r2 = r1, g2 = g1, b2= b1 ¹æÁ¤½ÄÀÌ µµÃâµÇ¾î ÀÔ·Â »ö»óÀº ¾Æ¹« º¯È¾øÀÌ ±×´ë·Î Ãâ·Â »ö»óÀÌ
µÈ´Ù.
±×·¸Áö ¾Ê´Ù¸é °¢ »ö»ó ¿ä¼Ò³¢¸® ¼·Î ¿µÇâÀ» ¹ÌÃÄ ´Ù¾çÇÑ °á°ú°¡ ¸¸µé¾îÁø´Ù. °á±¹
»ö»ó ¸ÅÆ®¸¯½º´Â °á°ú°ªÀ» ¸¸µå´Â 4°³ÀÇ ¹æÁ¤½Ä¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â °öÇØÁö´Â °ª, ´õÇØÁö´Â °ªÀÇ ÁýÇÕÀÌ´Ù. ¹à±â¸¦ Á¶Á¤ÇÏ´Â M1 ¸ÅÆ®¸¯½º´Â ´ÜÀ§ Çà·Ä¿¡¼ m40 ~ m42±îÁö°¡ Bright Çʵå·Î ÃʱâȵǸç ÀÌ ¸ÅÆ®¸¯½º¿¡ ÀÇÇØ ´ÙÀ½ ¹æÁ¤½ÄÀÌ µµÃâµÈ´Ù.
r2 = r1+ Bright;
g2 = g1+ Bright;
b2 = b1+ Bright;
¿øº»»ö r1, g1, b1¿¡ ´ëÇØ
Bright¸¸ÅÀ» ´õÇØ °á°ú°ª r2, g2, b2°¡ ¸¸µé¾îÁö´Â ¼ÀÀÌ´Ù. Åõ¸íµµÀÎ ¾ËÆÄ´Â À̹ÌÁö ÀÚü¿¡ Á¤º¸°¡ ¾øÀ¸¹Ç·Î º¸Åë º° º¯È¸¦ ÁÖÁö ¾Ê´Â´Ù.
Bright°¡ ¾ç¼öÀÌ¸é ¸ðµç »ö»óÀÇ °µµ°¡ ³ô¾ÆÁö¹Ç·Î ÀüüÀûÀ¸·Î ¹à¾ÆÁö°í À½¼öÀÌ¸é °µµ°¡ ³·¾ÆÁö¹Ç·Î ¾îµÎ¿öÁø´Ù. ´ÙÀ½Àº 1, 2 Å°¸¦ °¢°¢ ¼¼ ¹ø¾¿ ´·¯ ¹à±â¸¦ Á¶Á¤ÇÑ °ÍÀÌ´Ù.
³ª¸ÓÁö Äڵ嵵 ¿ø¸®´Â µ¿ÀÏÇÏ´Ù. ¹æÁ¤½ÄÀÌ ¾î¶»°Ô ÀÛ¼ºµÇ´Â°¡¿¡ µû¶ó
°á°ú°¡ ´Ù¸£°Ô ³ª¿À´Â °Í »ÓÀÌ´Ù.
¹ÝÀüÀ̶õ À̹ÌÁöÀÇ ¸ðµç »ö»óÀ» ¹Ý´ë·Î µÚÁý´Â °ÍÀÌ´Ù. Áï Èò»öÀº °ËÁ¤»öÀ¸·Î, °ËÁ¤»öÀº Èò»öÀ¸·Î ¹Ù²Ù°í ¿ø»öÀº º¸»öÀ¸·Î ¹Ù²ï´Ù. ¾î°¼ ±×·¸°Ô
µÇ´ÂÁö »ö»ó ¸ÅÆ®¸¯½º¸¦ ºÐ¼®ÇØ º¸ÀÚ.
´ÜÀ§ Çà·Ä¿¡¼ ´ë°¢¼± ¼¼ °³ÀÇ °öÇØÁö´Â °ªÀº -1.0À¸·Î, ´õÇØÁö´Â °ªÀº 1.0À¸·Î ¹Ù²î¾ú´Ù.
¿ø·¡°ªÀÇ ºÎÈ£¸¦ ¹Ý´ë·Î µÚÁý°í ¿©±â¿¡ 1.0À» ´õÇØ °á°ú»öÀ» ¸¸µç´Ù. ÀÌ °ö¼À¿¡ ÀÇÇØ ´ÙÀ½ ¹æÁ¤½ÄÀÌ ¸¸µé¾îÁø´Ù.
r2 = 1.0 - r1;
g2 = 1.0 - g1;
b2 = 1.0 - b1;
255´Â 0ÀÌ µÇ°í 0Àº 255°¡ µÇ¸ç 100Àº 155°¡ µÇ°í 200Àº 55°¡
µÈ´Ù. 1.0, Áï 255¿¡¼ ¿ø·¡ »ö»óÀÇ °µµ¸¦ »« °á°ú»öÀ»
¸¸µé¾î ¹Ý´ë»öÀÌ µÈ´Ù. ¿À¼Ö±æÀÇ ¹ÝÀü °á°ú´Â ´ÙÀ½°ú °°´Ù.
ÃÊ·Ï»öÀÌ º¸»ö °ü°èÀÎ ºÐÈ«»öÀ¸·Î ¹Ù²î°í Èò»öÀÌ °ËÁ¤»öÀ¸·Î ¹Ù²î¾î ¿À¼Ö±æÀÌ °©ÀÚ±â À¯·É±æ·Î ¹Ù²ï´Ù.
±×·¹ÀÌ ½ºÄÉÀÏÀº »ö»ó Á¤º¸¸¦ Á¦°ÅÇÏ°í ¹à±â Á¤º¸¸¸ ³²°Ü »çÁøÀ» Å»»ö½ÃÅ°´Â °ÍÀÌ´Ù. »ö»ó ¸ÅÆ®¸¯½ºÀÇ ¸ð¾çÀÌ Á¶±Ý µ¶Æ¯Çѵ¥ ¹æÁ¤½ÄÀ¸·Î Ç®¾îº¸ÀÚ.
r2 = 0.299 * r1 + 0.587 * g1 + 0.114 * b1;
g2 = 0.299 * r1 + 0.587 * g1 + 0.114 * b1;
b2 = 0.299 * r1 + 0.587 * g1 + 0.114 * b1;
R, G, B ¿ä¼Ò°¡ ¸ðµÎ °°Àº ½ÄÀ¸·ÎºÎÅÍ ¸¸µé¾îÁö¹Ç·Î °á°ú »öÀÇ RGB ¿ä¼Ò´Â °µµ°¡ ¸ðµÎ °°¾Æ ȸ»ö °èÅëÀÌ µÈ´Ù. À̶§ ¿øº»»öÀÇ
¹à±â Á¤º¸¸¸À» ÃëÇϴµ¥ »¡°£»öÀ» 30%, ³ì»öÀ» 60%, ÆĶõ»öÀ» 10% Á¤µµ ÃëÇÑ´Ù. °¢ ¿ä¼ÒÀÇ °¡ÁßÄ¡°¡ ´Ù¸¥ ÀÌÀ¯´Â »ç¶÷ÀÇ ´«ÀÌ
³ì»ö¿¡ °¡Àå ¹Î°¨Çϱ⠶§¹®ÀÌ´Ù. ½ÇÇà °á°ú´Â Èæ¹éÀÇ Áö¸é¿¡ ½Ç¾î ºÁ¾ß º° Â÷À̾øÀ¸¹Ç·Î ȸéÀ¸·Î Á÷Á¢
È®ÀÎÇØ º¸¾Æ¶ó.
´ÙÀ½ ¸Þ¼µå´Â ƯÁ¤ »ö»óÀ» ´Ù¸¥ »ö»óÀ¸·Î º¯°æÇÑ´Ù. ÇѲ¨¹ø¿¡ ¿©·¯
°³ÀÇ »ö»óÀ» º¯°æÇÒ ¼öµµ ÀÖ´Ù.
public void SetRemapTable (ColorMap[] map)
ColorMap °´Ã¼´Â
OldColor, NewColor ÇÁ·ÎÆÛƼ¸¦ °¡Áö´Âµ¥ ¿øº»ÀÇ ¾î¶² »öÀ» »õ·Î¿î »ö°ú ´ëÀÀ½ÃŲ´Ù. ÀÌ·± ColorMap °´Ã¼¸¦ ¿©·¯ °³ »ý¼ºÇÏ¿© ¹è¿À» ±¸¼ºÇÏ°í ÀÌ ¹è¿À»
SetRemapTable ¸Þ¼µå·Î Àü´ÞÇÏ¸é ¹è¿ÀÇ Áö½Ã´ë·Î ¿øº»ÀÇ »ö»óÀ» º¯°æÇÑ´Ù. 5 Å°¸¦
´©¸£¸é ÇÏ´ÃÂÊÀÇ Èò»öÀÌ ÆĶõ»öÀ¸·Î ¹Ù²ï´Ù.
µðÁöÅÐ Ä«¸Þ¶ó·Î ÂïÀº »çÁøÀº °°Àº »öÀÌ º°·Î ¾ø´Ù. ¿À¼Ö±æ »çÀÌ·Î
º¸ÀÌ´Â ÇÏ´ÃÀÌ Èò»öÀÌÁö¸¸ Á¤È®ÇÑ ¼ø¹é»öÀº ÀÌ Áß ¸î °³ ¾ÈµÇ¸ç ±×·¡¼ º¯È¯ÀÇ È¿°ú¸¦ È®ÀÎÇϱ⠾î·Æ´Ù. ¸¸È³ª
Æ÷½ºÅÍó·³ ³ÐÀº ¸éÀûÀÌ ÀÖ´Â À̹ÌÁö´Â ÀÌ ¸Þ¼µå°¡ ¾µ¸¸ÇÏ´Ù. ¿¹¸¦ µé¾î ·Îº¸Æ® Å层 VÀÇ °ËÁ¤»ö ÆÒƼ¸¦ »¡°£»öÀ¸·Î ¹Ù²ã ÀÔÈú ¼ö ÀÖ´Ù.