Winform์˜ ์กฑ์‡„ GDI+

GDI์™€ ๋น„๊ตํ•ด๋„ GDI+(System.Drawing)๋Š” ๋”์ฐํ•˜๊ฒŒ ๋Š๋ฆฝ๋‹ˆ๋‹ค.
GPU ๊ฐ€์† ์—†์ด CPU ์ž์›๋งŒ์„ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ 
GDI+๋Š” ๊ณ ์ˆ˜์ค€ API๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ๋งค์šฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค.
MS๋Š” ๋Œ€์ฒด ๋ฌด์Šจ ์ƒ๊ฐ์œผ๋กœ GDI+๋ฅผ ๋งŒ๋“  ๊ฑธ๊นŒ์š”?
์š”์ฆ˜ ์ปดํ“จํ„ฐ ์‚ฌ์–‘์œผ๋กœ ํ™”๋ฉด ๋“œ๋กœ์ž‰ํ•˜๋Š” ๊ณผ์ •์ด ๋ˆˆ์— ๋ณด์ด๋ฉด ์ฐธ ์•ˆํƒ€๊นŒ์›Œ์š”
C# GDI Wrapper Class ์žˆ๋‚˜ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ ์—†์–ด์„œ ์ข€ ์‹ค๋งโ€ฆ
์ž์ž‘ํ•˜๊ฑฐ๋‚˜ 2d2lib, SharpDX ์จ์•ผ ๋  ๋“ฏโ€ฆ

4๊ฐœ์˜ ์ข‹์•„์š”

GDI+๋ฅผ ์š”์ฆˆ์Œ (2022๋…„) ๋‚ด๋†จ๋‹ค๋ฉด โ€œ์ •๋ง ๋ฌด์Šจ ์ƒ๊ฐ์œผ๋กœ ๋งŒ๋“ ๊ฑฐ์ง€?โ€ ์˜€๊ฒ ์ง€๋งŒ, ์•„์‹œ๋‹ค์‹œํ”ผ GDI+๋Š” ๋‚˜์˜จ์ง€ ์—„์ฒญ ์˜ค๋ž˜๋œ ๋ ˆ๊ฑฐ์‹œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. :sweat_smile:

์œ„ํ‚คํ”ผ๋””์•„ ์–ธ๊ธ‰์œผ๋กœ ๋ณด๋ฉด Windows XP๊ฐ€ ์ถœ์‹œ๋˜๋˜ 2001๋…„ ํ›„๋ฐ˜์— ๊ณต์‹ํ™”๋˜์—ˆ๊ณ , ์ œ ๊ธฐ์–ต์œผ๋กœ๋„ ๊ทธ ๋ฌด๋ ต์— GDI+ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์„ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ์–ด๋Š๋ง ์ถœ์‹œ๋œ์ง€ 20๋…„์ด ๋„˜์€ ๊ธฐ์ˆ ์ด๋„ค์š”. ใ…Žใ…Ž

Windows Forms ์—ญ์‹œ ๊ทธ ๋‹น์‹œ Windows ์šด์˜ ์ฒด์ œ์— ๋งž์ถ”์–ด Visual Basic 6.0์ด๋‚˜ MFC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งž์ถ”์–ด ๋‹ท๋„ท์œผ๋กœ ๋น„์Šทํ•œ ์œ ํ˜•์˜ GUI๋ฅผ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ๋‹ˆ์ฆˆ์— ๋ถ€ํ•ฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ํ”„๋ ˆ์ž„์›Œํฌ์˜€์—ˆ์ฃ . (์‹ค์ œ๋กœ VB6๋กœ GUI๋ฅผ ๊ฐœ๋ฐœํ•˜๋˜ ๋ถ„๋“ค์—๊ฒŒ๋Š” ์นœ์ˆ™ํ•œ ๋ชจ๋ธ์ด๊ธด ํ•ฉ๋‹ˆ๋‹ค.)

์ €๋„ GDI+์™€ API ์ฝœ์„ 100% ๋งž์ถ”์–ด์„œ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๋Š” 3D ๊ฐ€์†์ด ๋˜๋Š” 2D ๊ทธ๋ž˜ํ”ฝ ํ”„๋ ˆ์ž„์›Œํฌโ€ฆ๋ฅผ Microsoft์—์„œ ๋งŒ๋“ค์–ด์ค€๋‹ค๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ MS ๋˜ํ•œ ๊ทœ๋ชจ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์„ ๋ฟ ๊ทธ๋“ค๋„ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ •ํ•ด์„œ ๊ธฐ์ˆ ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋งŒํผ GDI+์— 3D ๊ฐ€์†์„ ์ž…ํžˆ๋Š” ๋ฆฌ๋…ธ๋ฒ ์ด์…˜์€ ๋‹จํ–‰ํ•˜๊ธฐ ์–ด๋ ต์ง€ ์•Š์„๊นŒ? ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

5๊ฐœ์˜ ์ข‹์•„์š”

20๋…„ ์ „์— GDI+ ์ผ๋‹ค๊ฐ€ ๋Š๋ ค์„œ ์—ฟ๋จน์€ ๊ธฐ์–ต์ด ๋‚ฉ๋‹ˆ๋‹ค.
์ง€๊ธˆ์€ ๋Œ€์•ˆ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด์ง„ ๊ฒƒ ๊ฐ™์•„์š”
VB6, ์œˆํผ๊ณผ ํ•จ๊ป˜ ๋ฒ„๋ ค์ง„ ๊ฒƒ์ด์ฃ โ€ฆ ์œˆ๋„ํฐ๋„โ€ฆ

2๊ฐœ์˜ ์ข‹์•„์š”

15๋…„ ์ „ ๋“€์–ผ์ฝ”์–ด CPU์—์„œ WinForms๋กœ๋„ ์ถฉ๋ถ„ํžˆ ๋ฏธ๋ คํ•˜๊ณ  ์‘๋‹ต์„ฑ ์ข‹์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋“œ๋กœ์ž‰ ๊ณผ์ •์ด ๋ˆˆ์— ๋ณด์ผ ์ •๋„๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž˜ ๋ชป ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒŒ ์•„๋‹๊นŒ์š”?

4๊ฐœ์˜ ์ข‹์•„์š”

์œ ์ €์ปจํŠธ๋กค๋กœ ์—ฌ๋Ÿฌ view๋“ค์„ ๋งŒ๋“ค์–ด์„œ visible ์†์„ฑ์œผ๋กœ ํ™”๋ฉด ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜ ํƒญ์ปจํŠธ๋กค๋กœ ํ™”๋ฉด ์ „ํ™˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ–ˆ์„๋•Œ ํ™”๋ฉด์— ์—ฌ๋Ÿฌ ui ์ปจํŠธ๋กค๋“ค์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋”๋ธ”๋ฒ„ํผ๋ง ์†์„ฑ์„ ์ค˜๋„ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •์ด ์‚ด์ง ๋ˆˆ์— ๋ณด์ž…๋‹ˆ๋‹ค.
์ด๋Ÿฐ๊ฑด ๋˜๊ฒŒ ์•„์‰ฝ๋”๋ผ๊ตฌ์š”. ๋น„์Šทํ•œ ui ๋ฅผ WPF ๋กœ ์ ์„ฑํ•˜๋ฉด ๊ทธ๋Ÿฐ ํ˜„์ƒ์ด ์ „ํ˜€ ๋ฐœ์ƒ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์š”์ฆ˜ ์œ ํ–‰ํ•˜๋Š” ํ‚ค์˜ค์Šคํฌ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ง ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด WPF ๋กœ ํ•ด์•ผํ•˜๊ฒ ๋”๋ผ๊ตฌ์š”.

4๊ฐœ์˜ ์ข‹์•„์š”

๋ช‡ ๊ฐ€์ง€ ์งš์„ ๊ฒƒ์ด ์žˆ์–ด์„œ ๋‹ต๊ธ€๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Windows Forms๋Š” .NET 6 ๊ธฐ์ค€ ํ˜„์žฌ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋กœ ๋ณ€๊ฒฝ๋˜์–ด ๊พธ์ค€ํžˆ ๊ฐœ๋ฐœ๊ณผ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ์–ด์„œ, "๋ฒ„๋ ค์กŒ๋‹ค"๋Š” ํ‘œํ˜„์€ ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜์—ฌ ์ถ”๊ฐ€ ์˜๊ฒฌ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. (์ฐธ๊ณ : GitHub - dotnet/winforms: Windows Forms is a .NET UI framework for building Windows desktop applications.)

๊ทธ๋ฆฌ๊ณ  ๊ธฐ์ˆ ์˜ ๋ฐœ์ „์ด ๋”๋””๊ณ  ๋‹ต๋‹ตํ•œ ๊ฒƒ์€ ์•„์‰ฌ์šด ์ ์ด ์žˆ์ง€๋งŒ, ํฌ๋Ÿผ์„ ์ฐพ์•„์ฃผ์‹œ๋Š” ๋ชจ๋“  ๋ถ„๋“ค์—๊ฒŒ ๊ฑด์„ค์ ์ธ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ ๊ทน์ ์ธ ๋…ธ๋ ฅ์„ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. Microsoft์˜ ์ œํ’ˆ ์ •์ฑ…์— ๋Œ€ํ•ด ์•„์‰ฌ์šด ์ ์€ ๋ชจ๋‘๋“ค ์กฐ๊ธˆ์”ฉ ๊ฐ€์ง€๊ณ  ๊ณ„์‹ค ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ณต๊ฒฉ์ ์ธ ํ”ผ๋“œ๋ฐฑ์€ ๊ฑด์„ค์ ์ธ ๋…ผ์˜๊ฐ€ ์•„๋‹Œ ์†Œ๋ชจ์ ์ธ ๋…ผ์Ÿ์„ ์ด‰๋ฐœ์‹œํ‚ค๋Š” ๋‹จ์ดˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๋ง™์Šต๋‹ˆ๋‹ค.

6๊ฐœ์˜ ์ข‹์•„์š”

Winform์€ ๋ฒ„๋ ค์ง€์ง€ ์•Š์•˜์–ด์š”! :disappointed:

3๊ฐœ์˜ ์ข‹์•„์š”

๊ทธ๋ฆฌ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ํ•œ 7~8๋…„ ์ „ ์ฏค์— ์ง„ํ–‰ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ์—์„œ
GDI+๋กœ ์‹ค์‹œ๊ฐ„ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ์ปจํŠธ๋กค์„ ์ œ์ž‘ํ–ˆ๋˜ ์ ์ด ์žˆ๋Š”๋ฐ,
์ „~ํ˜€ ๋ฒ„๋ฒ…์ž„ ์—†์ด ์ž˜ ์ž‘๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์‹ฌ์ง€์–ด ์ง€๊ธˆ๊ณผ ๋น„๊ตํ•˜๋ฉด PC์‚ฌ์–‘์ด ๋งŽ์ด ๋‚ฎ์•˜๋Š”๋ฐ๋„ ๋ง์ด์ฃ โ€ฆ
Paint๊ด€๋ จ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์™€ ๊ฐ์ฒด์˜ ์ƒ์„ฑ/์†Œ๋ฉธ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ํฌ๊ฒŒ ๋‹ฌ๋ผ์กŒ์—ˆ๋˜ ๊ธฐ์–ต์ด ๋‚˜๋„ค์š”.

์ง€๊ธˆ์ด์•ผ Windows10, Windows11์ด ๋‚˜์™€์„œ ์˜›๋‚  ๋ฐฉ์‹์ด๋ผ ์น˜๋ถ€๋  ์ˆ˜๊ฐ€ ์žˆ์ง€๋งŒ
๊ทธ๋•Œ ๋‹น์‹œ ๊ทธ๊ฑธ๋กœ ๋จน๊ณ  ์‚ฌ๋Š” ์‚ฌ๋žŒ๋„ ๋งŽ์•˜๋‹ค๋Š”๊ฑธ ๊ฐ์•ˆํ•˜๋ฉด, ๊ฒฐ๋ก ์€ ๊ทธ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์˜ ์ˆ™๋ จ๋„๊ฐ€ ์•„๋‹๊นŒ ์‹ถ์Šต๋‹ˆ๋‹คโ€ฆ

5๊ฐœ์˜ ์ข‹์•„์š”

๋จผ์ € ํƒœํด์€ ์•„๋‹ˆ๊ตฌ์š”.
4K ํ™˜๊ฒฝ์—์„œ๋Š” ๋Š๋ฆด์ˆ˜๋„ ์žˆ๊ฒ ๊ตฌ๋‚˜๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ๋Œ“๊ธ€๋‹ต๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธ๋Š” ์•ˆํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”

Winform์ด ๋ฒ„๋ ค์ก‹๋“  ์•„๋‹ˆ๋“ 
๋Š๋‚Œ์€ ์•Œ์•„์„œ ๊ณ ์‚ฌ ๋˜๊ฒ ์ง€ ํ•˜๋ฉฐ ๋ฐฉ์น˜ํ•œ ๋Š๋‚Œ์„ ์ง€์šธ์ˆ˜๋Š” ์—†๊ตฐ์š”โ€ฆ

1๊ฐœ์˜ ์ข‹์•„์š”

์Œโ€ฆ
@zzxxrrr @windowmini
ํ…Œ์ŠคํŠธ๋Š” ์•ˆํ•ด๋ดค์ง€๋งŒ ~~ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค
ํ˜น์€, ์–ด๋–ค์–ด๋–ค ๋Š๋‚Œ์ด ๋“ ๋‹คโ€ฆ
๋ผ๋Š” ๊ฒƒ์€ ์ฃ„์†กํ•˜์ง€๋งŒ ๊ทผ๊ฑฐ์—†๋Š” ๋ฉ˜ํŠธ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ…Œ์ŠคํŠธ๋Š” ์•ˆํ•ด๋ดค์ง€๋งŒ ๊ทธ๋ƒฅ ๋Š๋ฆด ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๊ณ โ€ฆ ์œˆํผ์ด ๊ณ ์‚ฌ๋˜๊ฒ ์ง€โ€ฆํ•˜๋Š” ๋Š๋‚Œ์ด ๋“œ๋Š”๋ฐ ํ™•์‹ ์€ ์—†๊ณ โ€ฆ

์œˆํผ์ด ๊ณ ์‚ฌ๋Š” ์ปค๋…•, ์ œ๋ฐœ ์ข€ ๊ทธ๋Œ€๋กœ ๋ฐฉ์น˜ํ•ด์„œ ๋†”๋’€์œผ๋ฉด ์ข‹๊ฒ ๊ณ  ๊ทธ๋งŒ ์ข€ ๋ฐœ์ „ํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ๋งค์ผ ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค.
์ ์–ด๋„ .NET 6, 7, 8 ๊ทธ๋ฆฌ๊ณ  C# ๋ฒ„์ „ ์ž์ฒด์˜ ๋ณ€ํ™” ํ๋ฆ„์„ ๋‹ค ์ดํ•ดํ•˜์‹ ๋‹ค๋ฉด ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ
๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ๊ณ ์‚ฌ, ๋ฐฉ์น˜๋ผ๋Š” ํ‘œํ˜„์€ ๋‹ท๋„ท, ์ ์–ด๋„ ์œˆํผ์€ ๊ฑฐ์˜ ๋ชจ๋ฅด์‹œ๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๋Š๋‚Œ์„ ์ง€์šธ ์ˆ˜๊ฐ€ ์—†๋„ค์š”โ€ฆ

์ €๋Š” 10๋…„์„ ํ•ด์˜ค๊ณ  ์žˆ์–ด๋„ ๊ทธ ๋ฐœ์ „ ์†๋„๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ๋ฒ„๊ฒ๊ฑฐ๋“ ์š”.

4๊ฐœ์˜ ์ข‹์•„์š”