C#

[C#] ๊ทธ๋ž˜ํ”ฝ GDI+ ๊ฐœ๋…๊ณผ ๊ฐ„๋‹จํ•œ ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ

hyonie 2024. 5. 22. 22:04

 

 


 

GDI ๋ž€?

GDI(Graphical Device Interface)๋Š” ์šด์˜์ฒด์ œ์—์„œ ๊ทธ๋ž˜ํ”ฝ ์ถœ๋ ฅ์„ ์œ„ํ•ด ๊ทธ๋ž˜ํ”ฝ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ์–ดํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ๊ฐ ๋ฒค๋”๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋ž˜ํ”ฝ ๋””๋ฐ”์ด์Šค์— ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค. GDI๋Š” ์ด๋Ÿฌํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์œˆ๋„์šฐ ์šด์˜์ฒด์ œ์—์„œ๋Š” gdi.dll ํ˜•ํƒœ๋กœ ์ œ๊ณต๋œ๋‹ค.

 

1. ๋™์ž‘๋ฐฉ์‹

ํ”„๋กœ๊ทธ๋žจ์ด ๊ทธ๋ž˜ํ”ฝ ์ถœ๋ ฅ์„ ์š”์ฒญํ•  ๋•Œ์˜ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

ํ”„๋กœ๊ทธ๋žจ ๊ทธ๋ž˜ํ”ฝ ์ถœ๋ ฅ ์š”์ฒญ ๊ณผ์ •

 

 

2. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋ž€?

๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋Š” OS ์ƒ์—์„œ ์—ฌ๋Ÿฌ ์žฅ์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ทธ๋ž˜ํ”ฝ, ์‚ฌ์šด๋“œ ๋“ฑ ๋‹ค์–‘ํ•œ ์žฅ์น˜๊ฐ€ ์žˆ๊ณ , ๊ฐ ์ œ์กฐ์‚ฌ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค:

  • ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ, ์‚ฌ์šด๋“œ ์นด๋“œ ๋“ฑ์˜ ์žฅ์น˜๋ฅผ ์ œ์–ด
  • ์žฅ์น˜์™€ ์šด์˜์ฒด์ œ ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ์ค‘์žฌ

 

 

3. GDI์˜ ์—ญํ• 

GDI๋Š” ํ‘œ์ค€ ๊ทœ์•ฝ์— ์˜ํ•ด OS์—์„œ ์ œ๊ณตํ•˜๋Š” DC์™€ ์—ฐ๊ฒฐ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ทธ๋ž˜ํ”ฝ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. GDI ์ธํ„ฐํŽ˜์ด์Šค์— ๋งž์ถฐ ๊ฐœ๋ฐœํ•˜๋ฉด, ํ•ด๋‹น ๊ทธ๋ž˜ํ”ฝ์ด ์ถœ๋ ฅ ์žฅ์น˜์— ๋งž๊ฒŒ ์•Œ์•„์„œ ์ถœ๋ ฅ๋œ๋‹ค. ์œˆ๋„์šฐ ํผ์—์„œ gdi ํŒŒ์ผ์€ GDI์˜ ์—ญํ• ์„ ํ•˜๋Š” ์•„์ด์ฝ˜์ด๋‹ค.

 

 

4. ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ

๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์—†๋‹ค๋ฉด, ํŠน์ • ์ œ์กฐ์‚ฌ(์˜ˆ: ์—”๋น„๋””์•„)์— ๋งž๊ฒŒ ๋ณ„๋„๋กœ ๊ฐœ๋ฐœํ•ด์•ผ ํ™”๋ฉด์— ์ถœ๋ ฅ๋œ๋‹ค. GDI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


 

 

GDI+ ๋ž€?

GDI+(Graphical Device Interface Plus)๋Š” ๊ธฐ์กด GDI๋ฅผ ํ™•์žฅํ•œ ๋ฒ„์ „์ด๋‹ค. GDI๊ฐ€ C์–ธ์–ด ๊ธฐ๋ฐ˜์ด๋ผ๋ฉด, GDI+๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํด๋ž˜์Šค์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ž˜ํ•‘๋œ ํ˜•ํƒœ์ด๋‹ค. ์ด๋Š” ๋” ๋งŽ์€ ๊ธฐ๋Šฅ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ , ๊ทธ๋ž˜ํ”ฝ ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 


GDI+ ์˜ ํŠน์ง•

  1. Graphics ๊ฐ์ฒด ์‚ฌ์šฉ: ํ™”๋ฉด์— ๋ชจ๋“  ๊ทธ๋ž˜ํ”ฝ ์ถœ๋ ฅ์€ Graphics ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ๋‹ค์–‘ํ•œ ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ ๋ฉ”์†Œ๋“œ: ๋„ํ˜•์„ ๊ทธ๋ฆฌ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์ด ์˜ค๋ฒ„๋กœ๋”ฉ ํ˜•ํƒœ๋กœ ๋‹ค์–‘ํ•˜๊ฒŒ ์ œ๊ณต๋œ๋‹ค.
  3. ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ: ํŽœ, ๋ธŒ๋Ÿฌ์‹œ ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ›„ ๋ณ„๋„๋กœ ํ•ด์ œํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ด๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.
  4. ๊ณ ๊ธ‰ ๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ: ๊ทธ๋ผ๋ฐ์ด์…˜ ๋ธŒ๋Ÿฌ์‹œ, ์•ŒํŒŒ๊ฐ’ ์ฒ˜๋ฆฌ, ํ…์ŠคํŠธ ์•ˆํ‹ฐ ์•Œ๋ฆฌ์•„์‹ฑ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๊ด€๋ จ ๊ธฐ๋Šฅ๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

 

 

 


 

GDI์™€ GDI+์˜ ์ฐจ์ด์ 

  • GDI์™€ GDI+๋Š” ๊ฐ๊ฐ ๋ณ„๋„๋กœ ์กด์žฌํ•˜๋ฉฐ, GDI+๋Š” gdiplus.dll ํ˜•ํƒœ๋กœ ์ œ๊ณต๋œ๋‹ค. GDI+๋Š” ๊ธฐ์กด GDI์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜์—ฌ ๋” ๋‚˜์€ ๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค.์š”์•ฝํ•˜์ž๋ฉด,
  • GDI๋Š” ์šด์˜์ฒด์ œ์™€ ๊ทธ๋ž˜ํ”ฝ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„ ์‚ฌ์ด์—์„œ ๊ทธ๋ž˜ํ”ฝ ์ถœ๋ ฅ์„ ์›ํ™œํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ, ๋‹ค์–‘ํ•œ ์ œ์กฐ์‚ฌ์˜ ์žฅ์น˜์—๋„ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๋ž˜ํ”ฝ ์ถœ๋ ฅ์„ ์ง€์›ํ•œ๋‹ค.
  • GDI+๋Š” ๊ธฐ์กด GDI์˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ™•์žฅ ๋ฒ„์ „์œผ๋กœ, ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ๊ณผ ํŽธ๋ฆฌํ•œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. GDI+๋Š” gdiplus.dll ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๊ณ , GDI์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

 


 

 

ํŽœ๊ณผ ๋ธŒ๋Ÿฌ์‹œ

GDI+์—์„œ์˜ ํŽœ๊ณผ ๋ธŒ๋Ÿฌ์‹œ๋Š” ์„ ๊ณผ ์ƒ‰์ƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด์ด๋‹ค. ์ด๊ฒƒ์€ ๋ณ„๋„์˜ ๋ฆฌ์†Œ์Šค๋กœ ์กด์žฌํ•˜๊ณ , ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฏธ์ˆ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๋Š” ํŒŒ๋ ˆํŠธ์™€ ํŽœ์„ ์—ฐ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ํŽœ์„ ์ƒ์„ฑํ•  ๋•Œ์—๋Š” ์ƒ‰์ƒ๊ณผ ์„ ์˜ ๊ตต๊ธฐ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. GDI+ ์—์„œ์˜ ํŽœ๊ณผ ๋ธŒ๋Ÿฌ์‹œ

  • ํŽœ ์ƒ์„ฑ: ์ƒ‰์ƒ๊ณผ ์„ ์˜ ๊ตต๊ธฐ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "Pen p(Color::Red, 5);"๋Š” ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๊ตต๊ธฐ๊ฐ€ 5์ธ ํŽœ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ: ํŽœ๊ณผ ๋ธŒ๋Ÿฌ์‹œ๋Š” ๋ณ„๋„์˜ ๋ฆฌ์†Œ์Šค๋กœ ์กด์žฌํ•˜๊ณ , ์‚ฌ์šฉ ํ›„์—๋Š” ํ•ด์ œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค.

 

2. C++ ๊ธฐ๋ฐ˜์˜ MFC์—์„œ์˜ ํŽœ๊ณผ ๋ธŒ๋Ÿฌ์‹œ

  • ๋ฆฌ์†Œ์Šค๋กœ ์กด์žฌ: MFC์—์„œ๋Š” ํŽœ๊ณผ ๋ธŒ๋Ÿฌ์‹œ๊ฐ€ ๋ณ„๋„์˜ ๋ฆฌ์†Œ์Šค๋กœ ์กด์žฌํ•œ๋‹ค.
  • ์ˆ˜๋™ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ: ์‚ฌ์šฉ ํ›„์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

3. C# ์—์„œ์˜ ํŽœ๊ณผ ๋ธŒ๋Ÿฌ์‹œ

  • ์ž๋™ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ: C#์—์„œ๋Š” ํŽœ๊ณผ ๋ธŒ๋Ÿฌ์‹œ์˜ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ: ํŽœ๊ณผ ๋ธŒ๋Ÿฌ์‹œ๋ฅผ ์‚ฌ์šฉํ•œ ํ›„์— ๋ณ„๋„์˜ ํ•ด์ œ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

 

 


 

ํŽœ

ํŽœ์€ ์„ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋กœ, ์ƒ‰์ƒ๊ณผ ๊ตต๊ธฐ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑ๋œ๋‹ค. 

  • ์ƒ‰์ƒ ์„ ํƒ: ์› ํ•˜๋Š” ์ƒ‰์ƒ์„ ์„ ํƒํ•œ๋‹ค. ์ƒ‰์ƒ์€ RGB ๊ฐ’์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์ƒ‰์ƒ์€ 0๋ถ€ํ„ฐ 255๊นŒ์ง€์˜ ๋ฒ”์œ„์—์„œ ์กฐํ•ฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, (255,0,0)์€ ๋นจ๊ฐ„์ƒ‰์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๊ตต๊ธฐ ์ง€์ •: ์„ ์˜ ๋‘๊ป˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์„ ์˜ ๊ตต๊ธฐ๋Š” ํ”ฝ์…€ ๋‹จ์œ„๋กœ ์„ค์ •๋œ๋‹ค.
  • ํŽœ ์ƒ์„ฑ: ์„ ํƒํ•œ ์ƒ‰์ƒ๊ณผ ๊ตต๊ธฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํŽœ์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑํ•œ ํŽœ์€ ๊ทธ๋ž˜ํ”ฝ ์ž‘์—…์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

 

1. ํŽœ์ด๋ž€ ์„ ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด

public Pen(Color color, float width);

 

2. ํŽœ ์ƒ์„ฑ ๋ฐฉ๋ฒ•

Pen p = new Pen(Color.Red, 5);
Pen p = new Pen(ColorFromArgb(255,0,0),5);

 

 

 


 

๋ธŒ๋Ÿฌ์‹œ

๋ธŒ๋Ÿฌ์‹œ๋Š” ๋„ํ˜•์„ ์ฑ„์šธ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋กœ, ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ ๋‹จ์ƒ‰ ๋ธŒ๋Ÿฌ์‹œ๋Š” ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ๋ธŒ๋Ÿฌ์‹œ๋Š” ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ๋ธŒ๋Ÿฌ์‹œ์ด๋‹ค.

 

๋ธŒ๋Ÿฌ์‹œ ์ข…๋ฅ˜

Brush ์ข…๋ฅ˜ ์„ค๋ช…
๋‹จ์ƒ‰ ๋ธŒ๋Ÿฌ์‹œ(SolidBrush) ์ฑ„์šธ ์ƒ‰์ƒ์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜์—ฌ ์ƒ์„ฑ
ํ•ด์น˜ ๋ธŒ๋Ÿฌ์‹œ(HatchBrush) ์ง์„  ๋˜๋Š” ๊ณก์„ ์œผ๋กœ ํŒจํ„ด์ด ๊ทธ๋ ค์ง„ ๋ธŒ๋Ÿฌ์‹œ
๊ทธ๋ผ๋””์–ธํŠธ ๋ธŒ๋Ÿฌ์‹œ(Linear/Path GradientBrush) ์ƒ‰์ƒ์ด ์„œ์„œํžˆ ๋ณ€ํ•˜๋Š” ๊ทธ๋ผ๋ฐ์ด์…˜ ํšจ๊ณผ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ธŒ๋Ÿฌ์‹œ
ํ…์Šค์ฒ˜ ๋ธŒ๋Ÿฌ์‹œ(TextureBrush) ์ด๋ฏธ์ง€๋‚˜ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ„์šฐ๋Š” ๋ธŒ๋Ÿฌ์‹œ

 

 

๋‹จ์ƒ‰ ๋ธŒ๋Ÿฌ์‹œ

  • ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ๋ธŒ๋Ÿฌ์‹œ๋กœ, ์ฑ„์šธ ์ƒ‰์ƒ์„ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.
    public SolidBrush(Color color);
  • ๋‹จ์ƒ‰ ๋ธŒ๋Ÿฌ์‹œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    SolidBrush b = new SolidBrush(Color.Blue);  // ๋ธ”๋ฃจ ์ƒ‰์ƒ์˜ ๋‹จ์ƒ‰ ๋ธŒ๋Ÿฌ์‹œ ์ƒ์„ฑ
    g.FillRectangle(b, 10, 10, 100, 100);  // ์ƒ์„ฑํ•œ ๋‹จ์ƒ‰ ๋ธŒ๋Ÿฌ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ๊ฐํ˜• ์ฑ„์šฐ๊ธฐ
    g.FillRectangle(Brushes.Red, 130, 10, 100, 100);
     
  • ๋ธŒ๋Ÿฌ์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ• ์ˆ˜๋„ ์žˆ๊ณ , ์ƒ์„ฑ์ž์—๊ฒŒ ์ •์ ์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์šฉํ• ์ˆ˜๋„์žˆ๋‹ค.
  • ๋‹จ์ƒ‰ ๋ธŒ๋Ÿฌ์‹œ๋Š” ์†”๋ฆฌ๋“œ๋ธŒ๋Ÿฌ์‹œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์ ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ƒ‰์œผ๋กœ ๋„ํ˜•์„ ์ฑ„์šด๋‹ค.

 

 

 


 

๊ธฐ๋ณธ์ ์ธ ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ - Graphics ํด๋ž˜์Šค

Graphics ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ์ ์ธ ๋„ํ˜•์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ํด๋ž˜์Šค์ด๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ๋‹ค์–‘ํ•œ ๋„ํ˜•์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

 

 


 

์ฃผ์š” ๋ฉ”์†Œ๋“œ

Graphics ํด๋ž˜์Šค๋Š” ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. Draw ๋ฉ”์†Œ๋“œ๋Š” ์„ ์„ ๊ทธ๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ณ , Fill ๋ฉ”์†Œ๋“œ๋Š” ๋„ํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋‹ค์Œ์€ ๊ทธ ์ค‘ ์ผ๋ถ€ ๋ฉ”์†Œ๋“œ์ด๋‹ค.

๋ฉ”์†Œ๋“œ ์„ค๋ช…
DrawArc ์ขŒํ‘œ, ๋„ˆ๋น„, ๋†’์ด์˜ ์Œ์œผ๋กœ ์ง€์ •๋œ ํƒ€์›์˜ ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ˜ธ๋ฅผ ๊ทธ๋ฆผ
DrawBezier 4๊ฐœ์˜ Point ๊ตฌ์กฐ์ฒด๋กœ ์ •์˜๋˜๋Š” 3์ฐจ์› ๊ณก์„  ์Šคํ”Œ๋ผ์ธ์„ ๊ทธ๋ฆผ
DrawCurve Point  ๊ตฌ์กฐ์ฒด์˜ ์ง€์ •๋œ ๋ฐฐ์—ด์„ ๋”ฐ๋ผ ์นด๋””๋„ ์Šคํ”Œ๋ผ์ธ์„ ๊ทธ๋ฆผ
DrawEllipse ์ขŒํ‘œ, ๋†’์•„, ๋„ˆ๋น„ ์Œ์œผ๋กœ ์ง€์ •๋œ ๊ฒฝ๊ณ„ ์‚ฌ๊ฐํ˜•์— ์˜ํ•ด ์ •์˜๋˜๋Š” ํƒ€์›์„ ๊ทธ๋ฆผ
DrawIcon ์ง€์ •๋œ ์•„์ด์ฝ˜์— ์˜ํ•ด ๋‚˜ํƒ€๋‚˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •๋œ ์ขŒํ‘œ์— ๊ทธ๋ฆผ
DrawImage ์ง€์ •๋œ ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •๋œ ์œ„์น˜์— ๊ทธ๋ฆผ
DrawLine ์ขŒํ‘œ์— ์˜ํ•ด ์ง€์ •๋œ ๋‘๊ฐœ์˜ ์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ์„ ๊ทธ๋ฆผ
FillEllipse ์ขŒํ‘œ, ๋„ˆ๋น„, ๋†’์ด์— ์˜ํ•ด ์ง€์ •๋œ ์‚ฌ๊ฐํ˜• ๋‚ด๋ถ€์— ๋‚ด์ ‘ํ•˜๋Š” ์›์„ ์ฑ„์›€
FillRectangle ์ขŒํ‘œ, ๋„ˆ๋น„, ๋†’์ด ์˜ํ•ด ์ง€์ •๋œ ์‚ฌ๊ฐํ˜•์˜ ๋‚ด๋ถ€๋ฅผ ์ฑ„์›€
FillRegion Region์˜ ๋‚ด๋ถ€๋ฅผ ์ฑ„์›€

 

 

Graphics ํด๋ž˜์Šค์˜ ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด ์ƒ์„ฑ

Form ํด๋ž˜์Šค์—์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” Paint ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๊ณ , ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ์—์„œ๋„ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋„๋ก ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Paint ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ์ƒ์„ฑ: Form ํด๋ž˜์Šค์— Paint ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    Form1_Paint
  • Paint ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ ๋‚ด๋ถ€์—์„œ ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด ์ƒ์„ฑ: Form1_Paint ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ Graphics ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
    private void Form1_Paint(object sender, PaintEventArgs e)
    {
    		Graphics g = e.Graphics;
    }
  • ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ์—์„œ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ: ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ์—์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค์•ผ ํ•  ๊ฒฝ์šฐ CreateGraphics() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
    private void Form1_Load(object sender, PaintEventArgs e)
    {
    		Graphics g = this.CreateGraphics();
    }

 




 

Form1_Paint ์ด๋ฒคํŠธ์—์„œ ์„ ๊ทธ๋ฆฌ๊ธฐ

์ง€๊ธˆ๊นŒ์ง€ ํผ ๊ธฐ๋ฐ˜์—์„œ ์ปจํŠธ๋กค๋งŒ ๋ฐฐ์น˜ํ–ˆ์ง€๋งŒ, ์ด์ œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆผํŒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” Form1_Paint ์ด๋ฒคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” Form1_Paint๋ฐ–์— ์—†๋‹ค. ๋ฌด์กฐ๊ฑด ํ•ด๋‹น ์˜์—ญ์—์„œ ๊ทธ๋ ค์•ผํ•œ๋‹ค. Form์ด ๋กœ๋“œ ๋˜์—ˆ์„ ๋–„, ๋‹ค๋ฅธ ์ด๋ฒคํŠธ์—์„œ ๊ทธ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋ฅผ ์ธ์œ„์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค. ์™ธ๋ถ€์—์„œ ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ CreateGraphics()๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค.

 

1. ๊ธฐ๋ณธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ƒ์„ฑ

ํผ ์„ ํƒ ํ›„ paint ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋‹ค. ์†์„ฑ์—์„œ ๋”๋ธ” paint๋ฅผ ๋”๋ธ”ํด๋ฆญํ•˜๋ฉด, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ƒ์„ฑ

 

 

2. PaintEvent ํ•ธ๋“ค๋Ÿฌ์—์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด์ˆ˜ ์žˆ๋Š” ์ด์œ 

์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด์ˆ˜ ์žˆ๋‹ค. PaintEvent ํ•ธ๋“ค๋Ÿฌ์—์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” PaintEventArgs ํด๋ž˜์Šค ์•ˆ์—์„œ Graphics ๊ฐ์ฒด๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค. ๋‹ค๋ฅธ ๊ณณ์—๋Š” ์—†๋‹ค!! ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” Graphics ์•„๊ทœ๋จผํŠธ๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. 

 

 

new ์—ฐ์‚ฐ์ž๋กœ Graphics๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ€์ ธ์˜จ๋‹ค. Graphics๊ฐ€ ํ”„๋กœํผํ‹ฐ๋กœ ๋˜์–ด์žˆ๋‹ค.

๋‚ด๋ถ€์—์„œ returnํ•จ.

 

 

3. PaintEvent ์ฒ˜๋ฆฌ๊ธฐ ๋‚ด๋ถ€์— ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด ์ƒ์„ฑ

 

4. ์ฝ”๋“œ ์š”์•ฝ ์„ค๋ช…

  • Graphics ๊ฐ์ฒด ์ƒ์„ฑ
    • Graphics g = e.Graphics;
    • Paint ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ์—์„œ ์ œ๊ณต๋˜๋Š” e.Graphics๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
  • Pen ๊ฐ์ฒด ์ƒ์„ฑ
    • Pen p = new Pen(Color.Red, 5);
    • ๋นจ๊ฐ„์ƒ‰(Color.Red)๊ณผ ๊ตต๊ธฐ 5๋ฅผ ๊ฐ€์ง„ Pen ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
  • ์ขŒํ‘œ์„ค์ •
    • Point start =  new Point(50,50);
    • Point end = new Point(250,250);
    • ์‹œ์ž‘์ ๊ณผ ๋์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” Point ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์‹œ์ž‘์ ์€(50,50), ๋์ ์€(250,250)์ด๋‹ค.
  • ์„ ๊ทธ๋ฆฌ๊ธฐ
    • g.DrawLine(p, start, end);
    • Graphics๊ฐ์ฒด์˜ DrawLine ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์„ ๊ทธ๋ฆฐ๋‹ค.
    • p๋Š” Pen๊ฐ์ฒด start์™€ end๋Š” ์‹œ์ž‘์ ๊ณผ ๋์  ์ขŒํ‘œ์ด๋‹ค.

 

5. ์ถœ๋ ฅ UI

์š”์•ฝํ•˜์ž๋ฉด, Graphics๊ฐ์ฒด์˜ DrawLine๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘์ ๊ณผ ๋์  ์‚ฌ์ด์— ์„ ์„ ๊ทธ๋ฆด์ˆ˜ ์žˆ๋‹ค.

์ด๋กœ ์ธํ•ด ํผ์€ ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”ฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์œผ๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

 

์‚ฌ๊ฐํ˜•, ์›ํ˜• ๊ทธ๋ฆฌ๊ธฐ

์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹œ์ž‘ ์ขŒํ‘œ(x, y)์™€ ๋„ˆ๋น„, ๋†’์ด๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ด ์ •๋ณด๋กœ Graphics ๊ฐ์ฒด์™€ Pen ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ๊ฐํ˜•์„ ์›ํ•˜๋Š” ์œ„์น˜์™€ ํฌ๊ธฐ๋กœ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํผ์— ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

 

Rectangle ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ

์ด Rectangle ํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ 2๊ฐ€์ง€ ์žˆ๋‹ค.

  • DrawRectangle: ์‚ฌ๊ฐํ˜•์˜ ํ…Œ๋‘๋ฆฌ๋ฅผ ๊ทธ๋ ค์ฃผ๋Š” ๋ฉ”์†Œ๋“œ
  • FillRectangle: ์‚ฌ๊ฐํ˜•์˜ ๋‚ด๋ถ€๋ฅผ ์ฑ„์šฐ๋Š” ๋ฉ”์†Œ๋“œ

 

์ฝ”๋“œ ์˜ˆ์ œ

 

์ถœ๋ ฅ UI

 

 

PaintEvent๋Š” ์–ธ์ œ ๋ฐœ์ƒํ• ๊นŒ?

Form1.Designer.cs ๊ฐ€๋ฉด PaintEventHandler๊ฐ€ ๋ฐœ์ƒ์ด ๋˜์—ˆ์„๋•Œ, form1_Paint๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ์—ฐ๊ฒฐ ๋˜์–ด์žˆ๋‹ค.

์ฆ‰, ํ™”๋ฉด์ด ๋ณด์—ฌ์งˆ๋•Œ, ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.