<4D F736F F D20C7C1B7CEB1D7B7A55FC3D6C8EFB9E85F4E4554BFA1BCADC0C B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D62E646F63>

Size: px
Start display at page:

Download "<4D F736F F D20C7C1B7CEB1D7B7A55FC3D6C8EFB9E85F4E4554BFA1BCADC0C B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D62E646F63>"

Transcription

1 <.NET 플랫폼에서의 2D 그래픽프로그래밍 > 이논문에서는 MS가최신기술이자 2006년쯤에나올새로운 OS인롷혼 (Windows XP 의차세대버전 ) 의 API인 WinFX의기초가될.NET 라이브러리를사용하여 Manage( 관리 ) 환경에서의 2D 그래픽프로그래밍에대해서소개히고자한다. 본논문은크게두가지의주제로나누어설명을하고자한다. 첫째. GDI+ 를이용한 2D 그래픽프로그래밍의소개둘째. Managed DirectX를이용한그래픽프로그래밍의소개. 참고로이글에포함이되어있는소스는 C# 으로구성되어져있다. 특별히 C# 에대해서소개를한다는것은워낙방대한내용이고주제에대해서넘어서는내용이기에별도로언급하지않는다. 이글의소스는굳이 C# 을몰라도이해가가능한부분이많다고생각되나혹모르는분들은양해를부탁한다. 1. GDI+ 에대해 GDI+ 는 Win32 API의 GDI 프로그래밍방식을개선 / 발전시킨것으로.NET 뿐만아닌 Windows 2000 이상의플랫폼이라면 Win32 API에서도사용이가능하다. GDI+ 는.NET 에서그래픽작업을위하여제작된 API로특히웹, Windows 컨트롤을염두에두고설게되었다. GDI+ 는 API 라기보다는 GDI를감싼레퍼이다. GDI+ 는이해하기쉽고상속에기반한개체모델을제공한다. 특히 C++/MFC에경험이있는프로그래머라면 GDI+ 의개념을쉽게받아들일수있을것이다. GDI+ 의특징 1. 창, 비트맵, 프린터라는세종류의그리기표면을제공한다. 2. 2차원적인선을그릴수있는도구를제공한다. 무한히다양한브러시와펜을사용해서선, 도형, 다각형, 곡선을그릴수있다. 3. 다양한텍스트그리기를지원한다 ( 앤티엘리어싱도제공한다 ). 4. 이미지를읽었어그리기도가능하며이미지를생성하여그안에그림을그

2 리는것도가능하고또한다양한포맷으로저장도가능하다. 5. 인쇄지원으로미리보기기능도쉽게구현가능하다. GDI+ 의장점 1. GDI 이상의능력을제공한다. GDI 에서는구현하기가힘들었던기능들인반투명효과, 그라데이션브러시, 강력한그래픽패스등을제공한다. 2. GDI는복잡하여사용이까다로우나 GDI+ 는간결하면한결사용이편리하다. 3. GDI+ 는개체지향적클래스구조로되어있어 GDI+ 프로그래밍은개체의생성, 개체의속성설정, 개체의메소드호출로이루어진다. 4. 메소드오버로딩을사용한다. 따라서어떤한 GDI+ 개체의메소드를호출할때주어진상황에가장적합한인수들을받는버전의메소드를선택할수있다. 5. GDI+ 는외곽선그리기와내부채우기사이의차이를인식하여각각서로구별되는처리수단을제공하는좀더유연한그리기인터페이스를제공한다. 6. GDI+ 는상태관리의일부측면들을개발자로부터은폐한다. GDI+ 새로운기능 1). 그라데이션브러시 - GDI+ 는도형, 패스및영역을채우는데사용하는선형그라데이션브러시와패스그라데이션브러시를제공함으로서 GDI를확장한다. 그라데이션브러시는또한선, 곡선및패스를그리는데사용할수있다. 선형그라데이션브러시를사용하여도형내의위치에따라색상이변하도록도형을채울수있다. 도형을패스그라데이션브러시로채울때에는도형의한영역에서다른영역으로이동할때의색상변화를다양하게지정할수있다.

3 2). 카디널스프라인 GDI+ 는 GDI에서지원되지않던카디널스플라인을지원한다. 카디널스플라인은대형곡선을형성하는개별곡선순서집합이다. 스플라인은점의배열과그배열의각점을통과하는패스에의해지정된다. 카디널스플라인은배열의각점을날카로운모서리없이매끄럽게통과하므로, 직선을연결하여생성한패스보다더정교하다. 3). 독립적인패스개체 GDI+ 에서그리기는 Graphics 개체별로수행되며 Graphics 개체와분리된여러 GraphicsPath 개체를생성하고유지할수있다. GraphicsPath 개체는그리기가끝나도소멸되지않기때문에같은 GraphicsPath 개체를사용하여패스를여러번그릴수있다. 4). 변환및매트릭스개체 GDI+ 는회전이나변형등과같은변환작업을쉽고유연하게만들어주는강력한도구인 Matrix 개체를제공한다. 매트릭스개체는변형된개체와함께동작한다. 예를들어, GraphicsPath 개체는 Matrix 개체를인수로받는 Transform 메서드가있다.

4 5). 확장가능한영역 GDI+ 에서는 GDI 보다영역지원기능이대폭강화되었다. GDI 에서는영역이디바이스좌표로저장되며영역에적용할수있는유일한변환은변형이다. GDI+ 에서는영역을전역좌표로저장하며영역에크기조절등과같은모든변환매트릭스를적용할수있다. 다음예제에서는크기조절, 회전후변환변형을거친영역을보여준다. 6). 알파혼합알파혼합을사용하면채워진색상의투명성을지정할수있다. 투명한색상은배경색상과혼합된다. 채워지는색상의투명성을높일수록배경색이잘보인다.

5 7). 다양한이미지형식지원 GDI+ 에서제공되는 Image, Bitmap 및 Metafile 클래스를사용하여다양한형식으로이미지를로드및저장하고조작할수있습니다. 다음형식이지원됩니다. BITMAP. GIF, JPEG, EXIF, PNG, TIFF, ICON, WMF, EMF GDI+ 는개발자에게필요한대부분의그래픽기능성을제공하여일관적이고강력한고성능클래스들의집합이다. 그러나 GDI+ 는새로운라이브러리로써기능성에제한도있어때에따라서는 GDI를함께사용할경우도있다. GDI+ 네임스페이스 GDI+ 관련네임스페이스는총 6개로역할은다음과같다. 네임스페이스설명 System.Drawing 그리기표면, 이미지, 색, 브러시, 펜, 글꼴같은기본적인그래픽기능제공 System.Drawing.Drawing2D 고급레스터및벡터그래픽기능성을제공 System.Drawing.Imaging System.Drawing 네임스페이스가제공하는것이사의이미징기능성을제공 System.Drawing.Printing 인쇄및인쇄미리보기기능성을제공 System.Drawing.Text System.Drawing 네임스페이스가제공하는것이상의글꼴기능성을제공 System.Drawing.Design 사용자지정컨트롤의디자인시점지원을개선하기위한기능성제공

6 이글에서는 GDI+ 의모든것을다룰수는없으므로게임프로그래밍과밀접한 System.Drawing, System.Drawing.Drawing2D, System.Drawing.Imaging 네임스페이스에있는클래스들위주로설명하려고한다. 2. GDI+ 프로그래밍 (1) 간단한 C# 을사용한 GDI+ 프로그램 처음으로간단하게구성한 GDI+ 와 C# 으로구성된프로그램을소개하고자한다. 여기에서예제로소개할프로그램들은모두간단하므로소스설명과함께간단하게설명하는정도로하고자한다. 예 ) 1 using System; using System.Windows.Forms; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Drawing.Text; public class LineTextForm : Form // Win32 기반에서는 OnPaint 와같이그리기이벤트시호출되는함수이다. // OnPaint 는오버라이드할수도있고아니면 delegate 로위임시킬수도있다. protected override void OnPaint(PaintEventArgs e) // 그래픽스객체를얻어온다. Graphics g = e.graphics;

7 // 검은색의크기 3 의펜을하나생성한다. Pen blackpen = new Pen(Color.Black, 3); // 0,0 에서 100,100 점을생성한다. Point startpoint = new Point(0, 0); Point endpoint = new Point(100, 100); // 위에서생성한펜으로점사이를선으로긋는다. g.drawline(blackpen, startpoint, endpoint); // 검은색글자를그리기위해검은색브러시를생성한다. Brush blackbrush = new SolidBrush(Color.Black); // Times New Roman 글꼴패밀리를생성한다. FontFamily familyname = new FontFamily("Times New Roman"); // 글꼴패밀리를이용하여 24 픽셀의글꼴을생성. Font myfont = new Font(familyName, 24, FontStyle.Regular, GraphicsUnit.Pixel); // 글자를그릴위치의포인트를만든다. PointF startpoint = new PointF(10, 20); // Hello World! 라는글자를 10,20 위치에검은색의 Times New Roman 폰트로그린다. g.drawstring("hello World!", myfont, blackbrush, startpoint); // 프로그램진입점. 기존 C 및 C++ 프로그램의 main 과비슷하다. public static void Main() // 메인폼을생성후실행한다. Application.Run(new LineTextForm());

8 위프로그램은아주간단한형식의 C# 언어를이용한 GDI+ 프로그램이다. 메인폼 ( 윈도우 ) 에 OnPaintg 메소드를오버라이드하여 GDI+ 객체를이용하여선을긋고글자를그리고있다. 위예제를보면알겠지만예전 GDI에비해서간단하며상당히직관적으로되어있다는것을알고있다..NET에서는동적으로객체를생성하며객체의해제는.NET에서해주므로신경쓸필요가없다. 폼에그림을그리기 Win32 API에서프로그래밍시윈도우에서다시그리기를시도할때계속그려질려고하면 WM_PAINT 메시지에서그려질내용을기술하였는데.NET에서도이와같다. 위예제처럼 protected override void OnPaint(PaintEventArgs e) 을오버라이드하여정의하던가 LineTextForm.Paint += new System.Windows.Forms.PaintEventHandler(this.MapEditer_Paint); 처럼 delegate로특정함수로위임하여도된다..net의 OnPaint의동작은기존의 Win32의 WM_PAINT와같기때문에기존의윈도우프로그래머들은아주쉽게이해될것이다. Win32에서의 DC는.NET에서는 Graphics 기존의 Win32 프로그래밍에서는윈도우에무엇인가를그리기위해서는 DC를얻어서여기에다그렸었다..NET 에서는 Graphics가기존의 DC의역할을한다. Graphics g = e.graphics; OnPaint 이벤트에서 PaintEventArgs 인수를통해 Graphics 객체를얻는다. 다른이벤트에서만약뭔가를그리고싶다면 CreateGraphics 메소드로직접생성해야된다. Graphics g = LineTextForm.CreateGraphics(); 위의예제와 Win32 의 GDI를사용하는예제를비교를해보면.NET의 GDI+ 프로그래밍의간단함과편리함을어느정도알수있으리라생각한다. 그럼계속해서 GDI+ 의각요소에대해서이야기하겠다.

9 (2) 펜으로선과도형그리기 선과도형을그릴때에는 Graphics 개체의 DrawLine 메소드와 DrawRectangle 메소드를사용한다. 그리고선과도형의선의색이나굵기를지정할려면 Pen 개체를사용하여야된다. 그럼검은색펜을사용하여 100,100 좌표에서 250,300 으로선을긋는다면아래와같다. Pen pen = new Pen(Color.FromArgb(255, 0, 0, 0)); e.graphics.drawline(pen, 100, 100, 250, 300); Pen 클래스생성자를사용하여검은색 Pen을만드는데생성자의전달인수를 Color.FromArgb( 알파값, R, G, B) 메소드로색을지정하여넘겨준다. 3픽셀의 Pen으로 10,10 위치에너비는 50, 높이는 50인사각도형은그릴때는다음과같다. Pen blackpen = new Pen(Color.FromArgb(255, 0, 0, 0), 3); e.graphics.drawrectangle(blackpen, 10, 10, 50, 50); 펜의굵기가 3이므로 1픽셀은경계에 1픽셀은안쪽, 1픽셀은바깥쪽에그려진다. 선의앞과끝의모양을지정할려면선의앞과끝에화살표나사각형, 라운드등다양한스타일을지정할수있다. pen.startcap = LineCap.ArrowAnchor; pen.endcap = LineCap.RoundAnchor; 위와같이펜의앞과뒤에 LineCap으로스타일을지정하면된다. 밑의그림은 LineCap을지정한선의모습이다.

10 점선밒파선그리기 Pen 개체의 DashStyle 속성에 DashStyle 열거형중하나를선택함으로써점선이나파선을그릴수있다. Pen.DashStyle = DashStyle.Dash; 사용자지정선그리기 단색의일반적인선대신이미지파일을사용하여선을그릴수있다. 이런선을그릴려면 TextureBrush 개체를만들어 Pen 생성자에전달하면된다. 아래의예제는.NET Frmaework SDK에있는예제이다. Bitmap bitmap = new Bitmap("Texture1.jpg"); TextureBrush tbrush = new TextureBrush(bitmap); Pen texturedpen = new Pen(tBrush, 30); e.graphics.drawimage(bitmap, 0, 0, bitmap.width, bitmap.height); e.graphics.drawellipse(texturedpen, 100, 20, 200, 100); (3) 브러시사용 도형을색으로채우려면 SolidBrush 개체를만들어 Grpahics 클래스의채우기메소드중하나에인수로전달한다. 아래코드는녹색으로채워진타원을그린다. SolidBrush solidbrush = new SolidBrush( Color.FromArgb(255, 0, 255, 0) );

11 e.graphics.fillellipse(solidbrush, 0, 0, 100, 60); 도형의이미지로채우기도형을특정의이미지로채우려고하면 Image 클래스와 TextyreBrush 클래스를사용하면된다. // 채울이미지를생성한다. Image image = new Bitmap("particle.bmp"); // 이미지를사용할브러시를생성한다. TextureBrush tbrush = new TextureBrush(image); // 50,150 위치에타원을그린다. e.graphics.fillellipse(tbrush, new Rectangle(50, 150, 200, 300)); 도형에이미지를바둑판으로그리기위의 TextureBrush를사용하면도형에바둑판식으로이미지를채울수있다. 아래의예제는 SDK에있는것을인용하였다. 이미지를채울려고한다. Image image = new Bitmap("HouseAndTree.gif"); TextureBrush tbrush = new TextureBrush(image); Pen blackpen = new Pen(Color.Black); e.graphics.fillrectangle(tbrush, new Rectangle(0, 0, 200, 200));

12 e.graphics.drawrectangle(blackpen, new Rectangle(0, 0, 200, 200)); 위코드는다음과같이출력된다. 브러시개체의 WrapMode 속성을지정에따라이미지를대칭형으로그릴수있다. 가로대칭 세로대칭 가로세로대칭

13 WrapMode 속성값중 WrapMode.TileFlipX 는가로대칭, WrapMode.TileFlipY 는세로대칭, WrapMode.TileFlipXY 는가로세로대칭이되도록한다. (4) 이미지 GDI+ 에는레스터이미지에대해작업하는데사용하는 Bitmap 클래스와벡터이미지에대해작업하는데사용하는 MetaFile 클래스가있다. 이두클래스는모두 Image 클래스에서상속된다. 이미지의읽기및그리기파일에서이미지파일을읽어화면에그리려면 Bitmap 개체와 Graphics 개체가필요하다. Bitmap 클래스는이름만보면 BMP 파일만읽어수있는것처럼보이지만 BMP, GIF, JPEG, PNG, TIFF 파일도읽을수가있다. 기본적인이미지출력은 Bitmap 생성자에이미지파일이름을전달하여개체를만들고이개체를 Graphics 개체의 DrawImage 메소드에전달하면된다. Bitmap bitmap = new Bitmap("Grapes.jpg"); e.graphics.drawimage(bitmap, 60, 10); 위코드는 Graphics.jpg 파일을화면의 60,10에출력한다. 또다양한 Bitmap 생성자를이용하여다양한방법으로 Bitmap 클래스를생성하여사용할수있다. 이미지자르기및크기조정 Graphics 클래스에는다양하게하게오버로드된 DrawImage 메소드가있다. 그중일부는이미지를자르고배율을조정하는데사용할수있는원본및대상사각형매개변수가있다. 아래의예제는 SDK에있는예제로원본의사과이미지를그린후 DrawImage 메소드를사용하여원래사과이미지보다큰대상사각형에사과의일부를그린다. Image image = new Bitmap("Apple.gif"); // 사과이미지를 0,0 좌표에그린다.

14 e.graphics.drawimage(image, 0, 0); // 사과이미지의넓이및높이를얻는다. int width = image.width; int height = image.height; // 150,20 위치에사과이미지의 1.3배의실수를사용하는사각형개체를만든다. RectangleF destinationrect =new RectangleF( 150, 20, 1.3f * width, 1.3f * height); // 사과이미지의넓이와높이의 0.75 배크기의사각형개체를만든다. RectangleF sourcerect = new RectangleF(0, 0,.75f * width,.75f * height); // 사과이미지의원래이미지의 0.75까지 ( 만약넓이가 100 이라면 75) 만의크기를 // 원본이미지의 1.3배의크기로그린다. e.graphics.drawimage(image, destinationrect, sourcerect, GraphicsUnit.Pixel); DrawImage 메소드의첫번째인수는이미지개체, 두번째는출력되는위치및크기를가르키는사각개체, 세번째는그리기원하는이미지의위치및크기를가르키는사각개체, 네번째는측정단위를가르킨다. 배율조정시이미지의의보간모드에따라성능및이미지의질에영향을준다.

15 보간모드의선택은 Graphics 개체의 InterpolationMode 속성값을변경하면된다. InterpolationMode 는총 5개의열거가있다. NearestNeighbor Bilinear HighQualityBilinear Bicubic HighQualityBicubic 이미지의퀄리티는 NearestNeighbor < Bilinear < HighQualityBilinear < Bicubic < HighQualityBicubic 순이고성능은당연히그반대이다. 사용방법은 DrawImage 메소드를사용하기전에 e.graphics.interpolationmode = InterpolationMode.NearestNeighbor; 로설정해주면된다. 이미지의회전및반사원래이미지의왼쪽위, 오른쪽위, 왼쪽아래모서리에대한대상지점을지정하여이미지를회전및반사하고기울일수있다. 세개의대상지정에따라원래의사각형이미지를평행사변형으로매핑하는관계변환이결정된다. 넓이가 100, 높이가 50 인이미지를기울이고회전하고반사하려고한다. Point[] destinationpoints = new Point(200, 20), // 원본의왼쪽상단을가르킨다. new Point(110, 100), // 원본의오른쪽상단을가르킨다.

16 new Point(250, 30); // 원본의왼쪽하단을가르킨다. Image image = new Bitmap("Stripes.bmp"); // 원본이미지를 0,0 에그린다. e.graphics.drawimage(image, 0, 0); // 원본이미지를변형하여그린다. e.graphics.drawimage(image, destinationpoints); 자동배율조정을주의하자 일반적으로 DrawImage 메소드는 DrawImage( Image, x, y) 메소드를많이사용한다. 그러나위의메소드는때에따라서성능에영향을미친다. 만약 Image의해상도와 GDI+ 의해상도가서로다르면자동으로보간을한다. 그래서자동으로이미지배율을조정한다. 이것을막기위해서 DrawImage( Image, x, y, width, height ) 를사용하여자동으로행하는이지미의조정을막을수있다. 코딩의양이조금늘더라도가급적위치와크기를지정하는 DrawImage 메소드사용을권한다. 새로운이미지를생성하고이미지에그리기 새로운이미지를생성할려고하면 Bitmap 클래스의생성자중하나를선택하여사용한다. 다양한생성자가있으나일반적으로다음의 3가지를많이사용한다.

17 Bitmap bmp = new Bitmap( int width, int height ); Bitmap bmp = new Bitmap( int width, int height, PixelFormat pixelformat ); Bitmap bmp = new Bitmap( int width, int height, Graphics g ); 첫번째생성자는넓이와높이를지정하고픽셀형식은 Foramt32bppARGB 이다. 두번째생성자는넓이와높이, PixelFormat 열거형을지정한다. 세번째생성자는넓이와높이, 그리기를원하는 Graphics 개체의그리기표면과동일한해상도및색깊이를가지게한다. 다음의새로운이미지를만들고이이미지에속인찬사각형을그려보겠다. // 200, 200 크기의이미지를생성한다. Bitmap bmp = new Bitmap( 200, 200 ); // 비트맵이미지의그리기표면을얻는다. Graphics gimage = Grpahics.FromImage( bmp ); // 이미지의 0,0 에서비트맵이미지크기만큼의녹색으로채워진 // 사각형을그린다. gimage.fill Rectangle( Brushes.Green, 0, 0, bmp.width, bmp.height ); // 폼의그리기표면을얻는다. Graphics gscreen = g.graphics; // 폼에이미지를그린다. gscreen.drawimage( bmp, new Rectangle( 10, 10, bmp.width, bmp.height ); Bitmap 개체에그릴때의장점 1. 미리이미지에그리고필요할때 Paint 이벤트에서그린다. Paint 이벤트를받을때마다그릴필요가없이한번만그리면되므로성능을크게향상시킬수있다. 2. 복잡한그림을그릴때메모리안의이미지에서그리고다그린후 Paint에서그리므로깜빡임을피할수있다. 3. 블러링이나샤프닝같은이미지처리들은이미지를메모리상에서조작하는방식에서만구현가능하다.

18 합성모드에따른알파혼합 이미지전체를반투명하게만들던가기존이미지에새요소를반투명하게그려서이미지의기존내용과혼합되도록만들수있다. GDI+ 는합성모드는두가지가있다. 1. 그려지는색과알파를기존색과알파에혼합한다. 2. 그려지는색과알파를기존색과알파에덮어쓴다. 다음의예제는 SDK에있는예제로 Bitmap 개체를기반으로 Graphics 개체를만든후두개의반투명브러시가있는 Graphics 개체를사용하여비트맵에서빨강타원과녹색타원을그린다. 녹색타원은빨강타원과겹치지만합성모드를 CompositingMode.SourceCopy로설정하여혼합되지않도록한다. 그리고다음코드에서는폼의그리기표면에속이채워진사각형을그린다. 비트맵이미지와폼의표면에그린것이서로혼합되어그려진다. // 빈비트맵을생성한다. Bitmap mybitmap = new Bitmap(180, 100); // 비트맵의그리기표면을얻는다. Graphics bitmapgraphics = Graphics.FromImage(myBitmap); // 알파값을가지는붉은색과녹색의브러시를생성한다. SolidBrush redbrush = new SolidBrush(Color.FromArgb(210, 255, 0, 0)); SolidBrush greenbrush = new SolidBrush(Color.FromArgb(210, 0, 255, 0)); // 합성모드를덮어쓰기로설정한다. bitmapgraphics.compositingmode = CompositingMode.SourceCopy; // 알파값을가진붉은브러시로타원을그린다. bitmapgraphics.fillellipse(redbrush, 0, 0, 150, 70); // 위의타원과일부가겹쳐지는녹색의브러시로타원을그린다. bitmapgraphics.fillellipse(greenbrush, 30, 30, 150, 70);

19 // 합성의퀄리티를지정한다. e.graphics.compositingquality = CompositingQuality.GammaCorrected; // 세가지의색으로폼의그리기표면에사가형을그린다. SolidBrush colorbrush = new SolidBrush(Color.Aqua); e.graphics.fillrectangle(colorbrush, 200, 0, 60, 100); colorbrush.color = Color.Yellow; e.graphics.fillrectangle(colorbrush, 260, 0, 60, 100); colorbrush.color = Color.Fuchsia; e.graphics.fillrectangle(colorbrush, 320, 0, 60, 100); // 비트맵을그리기표면에그린다. e.graphics.drawimage(mybitmap, 0, 0); // 세가지색으로사각형을그린곳에비트맵을그린다. e.graphics.drawimage(mybitmap, 200, 0); 아래의결과를보면알겠지만비트맵파일에그린타원은서로덮어쓰기를하고있지만폼의배경에그린사각형과는합성을하고있다. 만약타원도서로혼합되게할려면 CompositingMode 를 bitmapgraphics.compositingmode = CompositingMode.SourceOver; 로변경하면된다. 결과는다음과같다.

20 이것으로.NET에서의 GDI+ 프로그래밍에대해서마칠까한다. 지금까지필자가적은것은 GDI+ 의아주일부분으로써아주기본만을간추린것이다. 사실적을게더많지만적으려면그내용이너무방대하기때문에너무기본만은소개한것에대해많은양해를바란다. 여기나온것말고더많은정보는서점에출간된.NET용책이나.NET Framework SDK를통해얻을수있다. 아직도온라인보드형게임에서는 Win32 기반의 GDI를사용하여그리는데.NET 에서는 GDI+ 를사용하여 GDI에비해서더욱쉽고빠르게개발을할수있으리라생각된다. 그러면이후는.NET에서사용하는 DirectX인 Managed DirectX에대해서이야기하겠다. 3. Managed DirectX Managed DirextX에대해서아주간단하게설명하면 Microsoft( 이하 MS) 의.NET 플랫폼에서사용하는 DirectX라고말할수있다. DirectX 8.0까지는.NET에서 DirectX를사용할려면 InteOP라는방식을이용하여간접적으로사용하던것을 9.0 에서.NET에서도편하게사용할수있도록하였다..NET이객체의관리를.NET 자체가해주므로.NET의언어들을 Managed( 관리 ) 언어라고하는데그래서기존의 DirectX에 Managed라는수식어가붙었다. 그래서 Managed DirectX는기존의 DirectX와구조가거의같으면서사용이더쉬워졌다고생각해도될것이다. Managed DirectX 는다음의컴포넌트로구성되어있다. Direct3D Graphics : 3D 그래픽프로그래밍에사용하는 API 를제공한다. DirectDraw : 비디오메모리로의하위레벨접근을제공하여빠른렌더링을 실현시켜준다.

21 DirectInput : 포스피드백기술의완전지원등다양한입력디바이스를지원해준다. DirectPlay : 멀티플레이어랑네트워크게임을지원한다. DirectSound : 디지털샘플의재생과캡쳐를지원한다. 오디오와비디오재생은오디오미디어와비디오미디어재생및제어를지원한다. Managed DirectX의장점 기존의 DirectX는 COM으로되어있어이것을사용하기위해 InterOP 레이어를사용했으나 Managed DirectX는바로사용하므로성능이향상된다. Managed 코드는코드의양을감소시켜생산성을향상시킨다. 인터페이스가고성능으로쉽게사용하는 Microsoft.NET Framework에공통된타입의인터페이스를사용하여아주직관적이다. Managed 코드를사용하면오브젝트의해방등메모리관리에관한대부분의작업에서해방된다. 4. Managed DirectX 를사용하기위한환경 Managed DirectX를사용하기위해서는 MS의.NET Framework 1.1 SDK와 DirectX 9 SDK, Visual Studio.NET 2002( 및상위버전 ) 가필요하다..NET Framework1.1 SDK와 DirectX 9 SDK는 MS 웹사이트에서다운로드받을수있다. ( 참고로개발 PC가아닌 PC에서.NET용프로그램을실행하기위해서는.NET Framework 1.1과 DirectX 9만설치되어있으면실행가능하다.) 참고로 DirectX 9 SDK는 Managed DirectX 부분이 2004 Summer Update에서약간변경된사항이있으므로꼭최신의 SDK를설치하기를바란다. Managed DirectX 는.NET 용언어인 C#, Visual Basic.NET 및 Managed C++ 언

22 어로프로그래밍하므로위의 3 언어중하나를선택해서프로그래밍해야된다. 사실위의 3개의언어는공통의라이브러리를사용하므로언어문법적인부분이다를뿐이지사용하는라이브러리는같기때문에크게차이는나지않는다고볼수있다. 새롭게프로그래밍언어를배우기힘든사람중기존에 Visual basic을사용해본사람은 Visual Basic.NET을사용하고 C++ 을사용할줄아는사람은 Managed C++ 를사용하기를추천하나가능하면 MS에서요즘가장밀고있으며.NET의대표언어인 C# 으로사용하기를바란다. 추천하는이유는최신의언어라서상당히잘만들어져있으며 MS에서.NET 샘플프로그램을주로이언어로사용해서만들기때문에 MS의강의나샘플프로그램을볼때많은도움이되기때문이다. 5. Managed DircetDraw 소개 Managed DirectDraw( 이하줄여서 MDD라고하겠다 ) 는기존의 DirectX의 DirectDraw와같다고보면된다. 이름을봐도비슷하지하니굿이따로설명하지않아도쉽게알수있었을것이라고생각한다. MDD는디스플레이메모리, 하드웨어블리트, 하드웨어오버레이지원, 플립, 서페이스지원을직접조작할수있다. DirectDraw가지원하는기능을모두지원하면각인터페이스의구조와이름도흡사하다. 그래서기존의 DirectDraw를아는사람은아주쉽게적응할수가있다. 요즘의게임은거의 3D로제작하는분위기라서사실 2D를한다는것은시대에뒤떨어진다는느낌을받을수가있는데필자는짧은게임개발경험이있지만아무리 3D가대세라고하지만 2D로만들수있는게임이있고 ( 특히온라인웹용보드게임은굿이 3D를사용할의미가없다라고볼수도있다 ), 2D가 3D 보다는게임제작방법이훨씬쉽고다양한기법이많이공개되어있었어아직.NET에익숙하지않던가 3D 개념이약한게임프로그래머들은먼저 MDD를습득하고 Direct3D로넘어가는것이아주좋은순서이지않을까생각된다. 다음은 MDD의구조에대한이해를위해기존의 DirectX 7.0의 DirectDraw와각중요인터페이스를서로비교하면다음과같다.

23 참고로아래의 MDD의클래스는모두 Microsoft.DirectX.DirectDraw 네임스페이스안에 있다. Managed DirectDraw DirectDraw 7.0 Cliper IDirectDrawClipper ColorControl IDirectDrawColorControl Device IDirectDraw7 DeviceCollection DirectDrawEnumerateEx 함수 DisplayModeCollection IDirectDraw7::EnumDisplayModes 함수 Palette IDirectDrawPalette Surface IDirectDrawSurface7 SurfaceCaps IDirectDrawSurface7 SurfaceDescription IDirectDrawSurface7::SetSurfaceDesc 함수 이이외에 Microsoft.DirectX.DirectDraw 네임스페이스안에는아주많은예외처리인터페이스가있으며프로그래밍시이것을이용하면안전하고편리하게예외에대응할수가있다 ( 참고로.NET의예외는 C++ 의예외와달리오버헤드가거의없다 ). 그리고 MDD는기존의 DirectDraw 7.0을단순히컨버전한것이아니라 7.0에없는기능이추가되어있어상당히편리하게사용할수있다 ( DX 7.0에는없는선긋기등이있다 ). MDD를공부할때기존의 DirectDraw와비교하는것은필수이다. 왜냐하면 MS가 DirectX 8.0부터기존의 2D를더이상지원하지않는데, Managed DirectX에서도 3D는아주자세히설명하고있지만 2D인 DirectDraw에대해서는거의한줄정도의설명밖에없었어처음 DirectDraw를접하는사람은거의알수가없기때문에 DirectDraw 7.0과인터페이스이름을서로비교하면서 DirectX 7.0 SDK의 DirectDraw 부분을같이봐야이해를할수있을것이다 ( 참고로 SummerUpdate 2004에서는예제도없어져버렸다 -_-). MDD가기존의 DirectDraw와거의흡사하기때문에설명은이것으로간단하게하고이제부터프로그래밍예를들면서설명하겠다 필자의어설픈설명보다는실제예를보는것이이해에더욱도움이될것이라생각된다. 그리고예제를설명하면서코드에나오는 C# 프로그래밍부분은간단하게만설명하겠다. 6. Managed DirectDraw 프로그래밍

24 1) 윈도우모드 ( 창모드 ) 애플리케이션 using System; using System.Drawing; using System.ComponentModel; using System.Windows.Forms; using Microsoft.DirectX; using Microsoft.DirectX.DirectDraw; namespace DXTest1 public class Windowed : System.Windows.Forms.Form private System.ComponentModel.Container components = null; // DirectDraw 관련객체를초기화한다. private Device draw = null; private Surface private Surface primary = null; offscreen = null; private Clipper clip = null; private Rectangle destination = new Rectangle(); //! 이프로그램의생성자 public Windowed() // 생성할윈도우를초기화한다. InitializeComponent(); // 디바이스를만든후창모드로지정후 Surface 를만든다. 1 // 윈도우의가로길이는 295 로설정. draw = new Device(); draw.setcooperativelevel( this, CooperativeLevelFlags.Normal ); 2 // 표면을생성한다. CreateSurfaces(); Width = 295; // 윈도우파괴자 protected override void Dispose(bool disposing) if( disposing ) if( components!= null ) components.dispose(); base.dispose(disposing); private void InitializeComponent() // 가로 : 세로비율울설정 this.autoscalebasesize = new

25 System.Drawing.Size( 5, 13 ); // 윈도우의클라이언트영역의크기를설정한다. this.clientsize = new System.Drawing.Size( 292, 266 ); // 타이틀바에표시된텍스트와윈도우의이름을설정하고이벤트를등록한다. this.name = "Windowed DX"; this.text = "Windowed DX"; // 윈도우의사이즈가변경될때의이벤트등록 this.resize += new System.EventHandler( this.windowed_sizechanged ); // 윈도우의사이즈가변경완료되었을때의이벤트등록 this.sizechanged += new System.EventHandler( this.windowed_sizechanged ); // 윈도우의그리기이벤트등록 this.paint += new System.Windows.Forms.PaintEventHandler ( this.windowed_paint ); // 실행한다. static void Main() Application.Run( new Windowed() ); 6 // 윈도우내부를그린다. private void Windowed_Paint( object sender, System.Windows.Forms.PaintEventArgs e ) Draw(); // 윈도우의사이즈가변경될때발생하는이벤트함수 private void Windowed_SizeChanged( object sender, System.EventArgs e ) Draw(); 7 // 윈도우내부에그리는함수. private void Draw() if( null == primary ) return; // 윈도우의크기가최소화되었다면그리지않는다. if( FormWindowState.Minimized == WindowState ) return; Height = Height < 50? 50 : Height; // 사각형의크기를윈도우의클라이언트영역의크기로만든다. destination = new Rectangle( PointToScreen( new Point(0,0) ), ClientSize );

26 try // 오프스크린의그림을표면스크린에그린다. primary.draw( destination, offscreen, DrawFlags.Wait ); // 메모리를잃어버렸다면다시표면을생성한다. catch( SurfaceLostException ) CreateSurfaces(); // 표면과후면서페이스를만들고표면서페이스에는클리퍼를설정한다. private void CreateSurfaces() SurfaceDescription description = new SurfaceDescription(); 3 4 description.surfacecaps.primarysurface = true; primary = new Surface( description, draw ); clip = new Clipper(draw); clip.window = this; primary.clipper = clip; description.clear(); // 후면서페이스에그림을로드한다. 5 offscreen = new Surface(DXUtil.SdkMediaPath + "\\earthenvmap.bmp", description, draw );

27 이소스는 SDK에있는예제로보면알겠지만상당히간단한프로그램이다. 그러나 MDD의기본적인부분은다있으므로이것만봐도대충어떤식으로프로그래밍하는지그리고기존의 DirectDraw7과얼마나비슷한지도알수있을것이다. 디바이스및그리기표면설정위예제의 1 에서디바이스를생성한다. 이것을통해 DirectDraw 개체를만들고시스템레벨의변수와같이작용한다. 직접하드웨어접근을가능하도록해준다. 그후애플리케이션의최상위동작을지정한다. draw = new Device(); draw.setcooperativelevel( this, CooperativeLevelFlags.Normal ); public void SetCooperativeLevel( Control parent, CooperativeLevelFlags flags ); 첫번째인자는지정할컨트롤 ( 즉폼 ( 윈도우 ) 를말한다 ) 이고, 두번째인자는최상위동작래벨을뜻한다. 예제에서는현폼 ( 윈도우 ) 를지정하고윈도우모드 ( 창모드 ) 로지정하였다. 참고로 Managed DirectX를이야기할때언급했지만현재 SDK에는이것에대한설명은한줄밖에없다. 그래서각인자나인자에서사용하는열거값은기존의 DirectDraw7의 SDK를참고해야만된다. 다행이이름이서로비슷해서찾는데어렵움은거의없다. 2 의 Createsurfaces() 에서서페이스와클리핑영역을설정한다.

28 SurfaceDescription description = new SurfaceDescription(); SurfaceDescription로어떤서페이스를만들건지설정한다. 서페이스의크기, 메모리할당방법, 전면 / 후면설정등을한다. 3 에서전면 Surface 를생성한다. 이 Surface 가폼의화면에출력된다. description.surfacecaps.primarysurface = true; primary = new ( description, draw ); Surface의생성자는다음과같다. public Surface (Stream, SurfaceDescription, Device) public Surface (Bitmap, SurfaceDescription, Device) public Surface (String, SurfaceDescription, Device) public Surface (SurfaceDescription, Device) 생성자를통해메모리, 비트맵이미지, 파일의이름및 Surface 기술자로생성이가능하다. 예제에서는전면 Surface이므로따로그려질내용을설정하지않았다. Surface 4 에서애플리케이션에서그려질영역을설정한다. clip = new Clipper(draw); clip.window = this; primary.clipper = clip; public Clipper (Device) Clipper 개체를생성하는생성자로 Device 개체를인자로받는다. Clipper 개체를만든후 Clipper와관련될윈도우를지정한다. 그후전면 Surface 의 Clipper에등록한다. 5 후면 Surface 를만들고후면 Surface 에그림을그린다. offscreen = new Surface(DXUtil.SdkMediaPath + "\\earthenvmap.bmp", description, draw ); Surface 의오버로드된 4 개의함수로되어있다. IOStream을통해 Surface를생성할때사용 public Surface (Stream, SurfaceDescription, Device) 비트맵파일을통해 Surface 를생성할때사용. 이미지를 Surface 에그린다.

29 public Surface (Bitmap, SurfaceDescription, Device) 파일이름을통해 Surface를생성 public Surface (String, SurfaceDescription, Device) Surface 기술자를통해 Surface를생성 public Surface (SurfaceDescription, Device) 이로써 DirectDraw를사용하도록하고그리기표면의설정이끝났다. 이제후면 Surface를전면 Surface로복사하고전면 Surface를화면에출력하면된다. 화면에출력 6의 Paint 이벤트의 Draw() 함수에서후면 Surface에그려진이미지를화면에출력하도록한다. 7에서폼이숨겨진상태일때에는그리기를중단시키고숨겨진상태가아니면현재폼의크기에맞게후면 Surface에그려진이미지를화면에출력하도록한다. primary.draw( destination, offscreen, DrawFlags.Wait ); public void Draw( Surface sourcesurface, DrawFlags flags ); DirectDraw7 의 IDirectDrawSurface7::Blt 와같은기능을한다. DrawFlags 는관련된 DrawEffects 구조체의유효한멤버를지정하던가칼라키정보를지정등특별한동작을요구할때사용하는열거의조합이다. DirectDraw7 의 4 번째파라메터와같은역할을한다. 그리고만약 Surface 메모리가분실되었다면 (Ctrl+Alt+Del 키를누르면발생한다 ) 다시 Surface를다시생성하도록예외처리를한다. catch( SurfaceLostException ) CreateSurfaces(); 예전의방식에서는언제나 Surface 표면을조사하여분실이일어나지않나를확인을해야되는데 MDD에서는 C# 의예외처리로간단하게처리한다. 참고로 C# 은 C++ 과다르게예외처리를.NET 자체에서지원해주므로예외처리에의한성능감소는거의없다. 필자가처음이예제를봤을때느낀것은정말간단하다는것이다. 기존의

30 DirectDraw은초기화를하는데복잡한감이없지않는데 Managed로포팅되면서.NET의라이브러리처럼간단하게사용하기쉽도록변한것을알수있었다. 그리고기존의유저들의배려하여이름이나전체적인구조는기존의것과같다는것이다. 그러나기존의것과비슷해서인지아니면 MS에서 3D 위주의정책때문인지레퍼런스가너무부실하다. 그래서 Managed DirectDraw를공부할려면 DirectDraw7 SDK가절대필요하다는것이좀아이러니하게만든다. 2) 전체모드및 Surface 를이요한페이지플리핑 사실일반적인게임에서는위의예제와같은윈도우모드보다는전체모드에서여러개의 Surface를만들어놓고이것을서로교체하는식으로만든다. 이런방식을사용한예제를토대로설명하겠다. using System; using System.Windows.Forms; using System.Drawing; using Microsoft.DirectX; using Microsoft.DirectX.DirectDraw; namespace DXTest2 public class MainClass : System.Windows.Forms.Form private System.ComponentModel.Container components = null; // 스크린의크기 const int screenwidth = 640; const int screenheight = 480; 1 Device displaydevice = null; // 디바이스 Surface front = null; // 앞면서페이스

31 Surface back = null; // 뒷면서페이스 Surface BackGround = null; // 배경서페이스 Surface SpriteImage = null; // 스프라이트이미지서페이스 // 스프라이트가총 5개이므로 5개의영역을잡아놓는다. private System.Drawing.Rectangle[] SpriteRect = new System.Drawing.Rectangle[5]; private int ianicount = 0; private int iframe = 0; private int imousex = 0; private int imousey = 100; // 스프라이트번호 // 프레임 // 스프라이트가그려질위치 X // 스프라이트가그려질위치 Y static void Main() MainClass mainclass = new MainClass(); Application.Exit(); public MainClass() InitializeComponent(); 2 InitializeDirectDraw(); 3 while( Created ) GameProc(); Application.DoEvents(); protected override void Dispose( bool disposing )

32 if( disposing ) if( components!= null ) components.dispose(); base.dispose( disposing ); 4 private void GameProc() // 배경의영역크기 Rectangle BackRect = new Rectangle( 0, 0, screenwidth, screenheight ); // 배경을뒷면서페이스에그린다. back.drawfast( 0, 0, BackGround, BackRect, DrawFastFlags.Wait DrawFastFlags.NoColorKey ); // 프레임을설정하고스프라이트이미지번호를로테이션시킨다. ++iframe; if( iframe >= 5 ) ++ianicount; if( ++ianicount >= 5 ) ianicount = 0; iframe = 0; // 뒷면서페이스에스프라이트를그린다. back.drawfast( imousex, imousey, SpriteImage, SpriteRect[iAniCount], DrawFastFlags.Wait DrawFastFlags.SourceColorKey );

33 // 앞면서페이스로뒷면서페이스를플립시킨다. front.flip( back, FlipFlags.Wait ); private void InitializeComponent() // 키이벤트와마우스이벤트를등록한다. this.keyup += new System.Windows.Forms.KeyEventHandler( this.dxtest2_keyup ); this.mousedown += new System.Windows.Forms.MouseEventHandler( this.dxtest2_mousedown ); private void DxTest2_KeyUp( object sender, System.Windows.Forms.KeyEventArgs e ) // 'ESC' 를누르면종료시킨다. if( Keys.Escape == e.keycode ) Close(); private void DXTest2_MouseDown( object sender, System.Windows.Forms.MouseEventArgs e ) // 마우스왼쪽을클릭하면이미지가그려질위치를마우스위치로변경한다. imousex = e.x - 50; imousey = e.y - 35; private void InitializeDirectDraw() // 서페이스스크립션과디바이스를생성 SurfaceDescription description = new SurfaceDescription();

34 displaydevice = new Device(); // 전체모드로설정한다. displaydevice.setcooperativelevel( this, CooperativeLevelFlags.FullscreenExclusive ); try // 디스플레이모드를설정한다. displaydevice.setdisplaymode( screenwidth, screenheight, 16, 0, false ); catch( UnsupportedException ) MessageBox.Show( "DirectX 초기화에실패하였습니다.", " 최흥배의 Managed DirectX 프로그래밍 " ); Close(); return; // 앞면서페이스를설정후할당한다. description.surfacecaps.primarysurface = description.surfacecaps.flip = description.surfacecaps.complex = true; description.backbuffercount = 1; front = new Surface( description, displaydevice ); // 뒷면서페이스를설정후할당한다. SurfaceCaps caps = new SurfaceCaps(); caps.backbuffer = true; back = front.getattachedsurface( caps ); 시킨다. displaydevice ); // 스프라이트서페이스와배경서페이스를그림과같이생성 description.clear(); SpriteImage = new Surface( "Exam3_1.bmp", description,

35 displaydevice ); BackGround = new Surface( "Exam3_2.bmp", description, 검은색 (0,0,0) 이된다. // 특별한칼라키를지정하지않았으므로칼라키는 ColorKey ck = new ColorKey(); SpriteImage.SetColorKey( ColorKeyFlags.SourceDraw, ck ); // 스프라이트이미지의영역을설정한다. SpriteRect[0] = new System.Drawing.Rectangle( new System.Drawing.Point( 0, 0), new System.Drawing.Size( 100, 70 ) ); SpriteRect[1] = new System.Drawing.Rectangle( new System.Drawing.Point( 100, 0), new System.Drawing.Size( 100, 70 ) ); SpriteRect[2] = new System.Drawing.Rectangle( new System.Drawing.Point( 200, 0), new System.Drawing.Size( 100, 70 ) ); SpriteRect[3] = new System.Drawing.Rectangle( new System.Drawing.Point( 300, 0), new System.Drawing.Size( 100, 70 ) ); SpriteRect[4] = new System.Drawing.Rectangle( new System.Drawing.Point( 400, 0), new System.Drawing.Size( 100, 70 ) ); void RestoreSurfaces() SurfaceDescription description = new SurfaceDescription(); displaydevice.restoreallsurfaces(); displaydevice ); SpriteImage.Dispose(); SpriteImage = null; SpriteImage = new Surface( "Exam3_1.bmp", description, ColorKey ck = new ColorKey(); SpriteImage.SetColorKey( ColorKeyFlags.SourceDraw, ck ); BackGround.Dispose(); BackGround = null;

36 displaydevice ); BackGround = new Surface( "Exam3_2.bmp", description, return; 이예제는 5개의그림을애니메이션시키는프로그램이다. 1 에서프로그램에서사용할변수를선언한다. 전면, 후면, 배경, 스프라이트이미지 Surface를선언한다. 2의 InitializeDirectDraw() 함수에서 DirectDraw 초기화및설정을한다. 첫예제와다르게전체모드로설정한다. displaydevice.setdisplaymode( screenwidth, screenheight, 16, 0, false ); 해상도크기를 640,480 크기에 16비트모드로설정한다. public void SetDisplayMode( int width, int height, int bitperpixel, int refreshrate, bool standardvgamode ); // 넓이 // 높이 // 픽셀단위 // 갱신률 // VgaMode 여부 전면과후면 Surface를설정후배경과스프라이트이미지 Surface를만든다. SpriteImage = new Surface( "Exam3_1.bmp", description, displaydevice ); BackGround = new Surface( "Exam3_2.bmp", description, displaydevice ); 그런후스프라이트그림에서그려지질않을색상을지정한다. ColorKey ck = new ColorKey(); SpriteImage.SetColorKey( ColorKeyFlags.SourceDraw, ck ); 하드웨어가 Surface에칼라키를지정할수있는경우사용한다. public void SetColorKey(

37 ColorKeyFlags flags, // 요구되는칼라키 ColorKey value // 칼라값 ); 이후각스프라이트이미지의영역을설정한다. 3에서프로그램이종료 (ESC 키를누른다 ) 할때까지무한으로스프라이트이미지를애니메이션될순서대로그린다. while( Created ) GameProc(); Application.DoEvents(); Application.DoEvents() 이함수는비주얼베이직을해본사람은알겠지만이프로그램이혼자시스템을독점하지못하도록시스템에권한을잠시넘겨주는것이다. 4 GameProc() 에서각 Surface를플리핑시키면서애니메이션된이미지를출력하게한다. private void GameProc() // 배경의영역크기 Rectangle BackRect = new Rectangle( 0, 0, screenwidth, screenheight ); // 배경을뒷면서페이스에그린다. back.drawfast( 0, 0, BackGround, BackRect, DrawFastFlags.Wait DrawFastFlags.NoColorKey ); // 프레임을설정하고스프라이트이미지번호를로테이션시킨다. ++iframe; if( iframe >= 5 ) ++ianicount; if( ++ianicount >= 5 ) ianicount = 0; iframe = 0;

38 // 뒷면서페이스에스프라이트를그린다. back.drawfast( imousex, imousey, SpriteImage, SpriteRect[iAniCount], DrawFastFlags.Wait DrawFastFlags.SourceColorKey ); // 앞면서페이스로뒷면서페이스를플립시킨다. front.flip( back, FlipFlags.Wait ); 먼저배경이미지의크기를정한후배경을그린다. back.drawfast( 0, 0, BackGround,BackRect,DrawFastFlags.Wait DrawFastFlags.NoColorKey ); DrawFastr는 DirectDraw7의 DirectDrawSurface7.BltFast와같은기능을한다. public void DrawFast( int xcoord, // 목적지의 x 좌표 int ycoord, // 목적지의좌표 Surface sourcesurface, // 소스 Surface Rectangle srcrectangle, // 소스 Surface에서목적지 Surface에그려질영역 DrawFastFlags flags // 전송타입 ); 예제에서는배경으로사용되는 Surface 전체를칼라키지정없이그리고있다. 후면 Surface에스프라이트로사용되는 Surface의일부영역을각프레임마다다르게지정하여그린다. 스프라이트를그릴때는배경은그려지면안되기때문에투명칼라키를지정한다. 다그려졌다면플리핑으로후면 Surface를전면 Surface에그린다. front.flip( back, FlipFlags.Wait ); BackBuffer Surface 와관련된 Surface 메모리를전면 Surface 에붙인다. public void Flip( Surface surface, // Flip 할 Surface FlipFlags flags // Flip 옵션 ); 이로써매프레임마다스프라이트이미지를그리는프로그램이완성되었다.

39 이예제도위의예제처럼복잡하던가어려운부분이없어이해가되리라생각된다. 다만필자는사실이예제를기존의 DirectDraw를조금이라도알고있다는가정하게적었기때문에처음접하는사람에게는어려움이있으리라도생각되기도한다. 그러나기존의 DirectDraw를조금만참고만하면금방이해할것이다. 3) Surface 에직접접근 Managed DirectDraw도기존의 DirectDraw와같이 Surface 메모리에직접접근하여그릴수있다. 그러나.NET이 C++ 에비해포인터접근이좀까다로워서사용하는방법을약간다르게해야된다. Array lpbuffer[][]; Surface back;.. // 메모리를잠근다. lpbuffer = back.lock( LockFlags.Wait LockFlags.SurfaceMemoryPointer ); for( int k = 200; k < 480; ++k ) // 두개의선을긋는다. lpbuffer.setvalue( 0xff22, 100, k ); lpbuffer.setvalue( 0xff22, 200, k ); // 메모리를푼다. back.unlock( lpbuffer ); Surface의메모리를조작할수있다. public Byte Lock (LockFlags) public Byte Lock (Rectangle, LockFlags) Managed 방식에서는 Lock을걸어 2차원 Array 형으로영역을얻어서 x,y 좌표를가르키는배열에그리면된다. 그러나내부적으로 2의제곱수의크기의

40 Surface에만 x,y 좌표를 1:1 접근이가능하지 Surface의넓이와크기가 2의제곱수가아니면선이삐뚤하게출력되었다. 이건아마 MS에서성능을좋게하기위해서 3D의텍스쳐크기지정방식과같게한것같다. 필자가해보지는않았지만 Array를 Byte에다시담아서비디오카드의실제 lpitch 값을사용하여접근하면되지않을까싶지만이렇게하는게 (.NET에서는포인터접근이꽤까다롭다 ) 너무까다로워지기때문에편하게 2의제곱수의크기의 Surface를사용하는게훨씬좋다 ( 필자는처음에 x,y 좌표에 1:1로맵핑되는걸로알아서그렇게했는데선이이상하게나와서조금헤매기도했다. 혹시나하는마음에 2의제곱수의크기를사용하니제대로나왔다..-_- ). 이것으로 Managed DirectDraw의중요부분은간단하게설명이된것같다. 보통위에서설명한부분이프로그래밍에서주로쓰이기때문에 Managed DirectDraw가어떤식으로프로그래밍되는지알수있으리라생각된다. 참고로이번에나온 DirectX SDK SummerUdate 2004에서 Managed DirectDraw 가예제도삭제되어버려서좀난감했다. 대세가 3D 인지라 MS에서는 2D도 3D에서구현하기를원하는것같다. 그러나아직 3D에익숙하지않은사람은 DirectDraw가훨씬접근하기가편할것이다. 그리고 3D를잘알던가관심이있는사람은 Managed Direct3D에서의 2D 프로그래밍을공부하는것도좋으리라생각된다. 필자는개인적으로아는사람과액션게임을하나만들려고하고있는데처음에는 DirectDraw로만들려고했다가이번 SDK 때문에 Managed Direct3D를사용하여 3D에서 2D 프로그래밍으로만들지고민중이다. 7. 끝으로. 이것으로.NET 플랫폼에서의그래픽프로그래밍에대한글을마치려고한다. 이글은정말부족한부분이너무많다. 필자의글을못적는실력과, 프로그래밍기술부족, 시간부족이겹치다보니이렇게질이떨어지는논문이나와버렸다. 제일처음소개한 GDI+ 프로그래밍만하더라도그양이만만치않아간추리기가힘들었고 Managed DirectX의경우에는필자는지금의회사에서는서버 / 클라이언트를다하지만원래서버담당이었고회사에서도 DirectX 부분은거의사용을하지않아경험이나기술적인이해가부족한편이었어꼭필요한부분은매끄럽게적지못했다. 그리고원래대로라면 Managed Direct3D도할려고했으나이부분은시

41 간이너무부족하여도저히쓸수가없었다. 사실어찌보면지금의게임프로그래머에게는 3D 부분이가장필요할듯한데이부분을다루지못해서너무아쉽다. 아직.NET이데스크탑환경에서는제대로활성화되지않았어사실지금은필요하지않을지도모른다. 그러나앞을생각하면꼭하면공부하기를바란다. 바로 MS에서그리도주장하는롱혼이라는 OS 때문이다. 이놈의 API는기존의 Win32 API가아닌.NET의라이브러리를확장한 WinFX를사용한다. 지금부터.NET을공부하여잘이해한사람은롱혼에서무리없이적응하겠지만그렇지못한프로그래머는예전의도스에서 Window95 플랫폼에서넘어올때적응하지못해낙오된프로그래머가될확률이높다. 또 Managed DirectX는기존의 DirectX에사용하기도편해서생산성이훨씬좋아진다. 현재의방식은개발에너무많은시간을소요하기때문에생산성을무시하지못한다. 외국의게임회사들도이점을상당히중요하게인식하고있다. 그리고성능도기존의것과큰차이는없다. 물론아직은기존의방식보다는좀느리지만차기버전에서는그차이도거의없어지리라생각된다 ( 참고로예전에퀘이크2가포팅된적이있는데이건정말.NET에대한성능을고려하지않고포팅된것이라서성능이많이떨어진다. 잘못된방식으로포팅을했기때문에.NET의대한이해를가지고포팅을해야제대로된성능을낸다 ). Managed DirectX에대한 MS의생각을알고싶다면다음의글을읽어보기를바란다..NET Show : Managed DirectX 인터뷰 그리고.NET용프로그램의성능튜닝에대한글은아래에잘나와있다..NET 애플리케이션의성능관련힌트와트릭 필자는개인적으로게임을만들려고하고있는데그게임을 Managed DirectX를사용하여만들려고한다. 게임에서사용하는툴은 GDI+ 를사용하여만들고간단한보드게임은 Managed DirectDraw를사용하고, 효과를많이사용하는게임은 Managed Direct3D를사용하여만들려고한다. 게임을만들면꼭필자의홈페이지에올릴테니참고하기를바라며그리고이번글에서적지못한 3D에관한글도꼭시간을내어필자의홈페이지에올리겠다. 일본의 MS 사이트에서는별도의 Managed DirectX 포럼이있어다양한의견을나누고있으면관련된컬럼도꾸준히올라오고있다. 우리나라는내가알기로아직은이런사이트가없는것으로아는데 Managed DirectX에관심이있는사람들끼

42 리서로정보를교환하여빠르게관련된기술을쌓았으면좋겠다고생각한다. 본문에서참고한출처 1..NET Framework SDK 도움말 2. GDI+ Programming:C# 을이용한사용자지정컨트롤작성하기 정보문화사 3. DirectX SDK 4. Windows 게임프로그래머를위한 X파일 사이버출판사 5. 필자의홈페이지 6. 일본마이크로소프트 DirectX 홈페이지 :

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

디지털영상처리3

디지털영상처리3 비트맵개요 BMP 파일의이해실제 BMP 파일의분석 BMP 파일을화면에출력 } 비트맵 (bitmap) 윈도우즈에서영상을표현하기위해사용되는윈도우즈 GDI(Graphic Device Interface) 오브젝트의하나 } 벡터그래픽 (vector graphics) 점, 선, 면등의기본적인그리기도구를이용하여그림을그리는방식 } 윈도우즈 GDI(Graphic Device

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx 2018 학년도 1 학기 JAVA 프로그래밍 II 514760-1 2018 년봄학기 5/10/2018 박경신 Lab#1 (ImageTest) Lab#1 은영상파일 (Image) 을읽어서정보를출력 Java Tutorials Lesson: Working with Images https://docs.oracle.com/javase/tutorial/2d/images/index.html

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

슬라이드 1

슬라이드 1 2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

(Microsoft PowerPoint - C#\260\355\261\3363\(WinForm\).ppt)

(Microsoft PowerPoint - C#\260\355\261\3363\(WinForm\).ppt) - 1 - C# Programming 이현정 hjyi@hotmail.com MCT/MCSD/MCAD/MCSD.NET 목차 - 2-1부 C# 언어 1장 C, C++ 그리고 C# 2장 Hello, C#! 3장변수와자료형 4장연산자 5장흐름제어 6장메쏘드 7장클래스 8장배열과컬렉션 9장속성과인덱서 10장델리게이트와이벤트 11장예외처리 12장특성 13장일반화프로그래밍

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 11 장상속 1. 상속의개념을이해한다. 2. 상속을이용하여자식클래스를작성할수있다. 3. 상속과접근지정자와의관계를이해한다. 4. 상속시생성자와소멸자가호출되는순서를이해한다. 이번장에서만들어볼프로그램 class Circle { int x, y; int radius;... class Rect { int x, y; int width, height;... 중복 상속의개요

More information

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우. 소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

제 1장 C#의 개요

제 1장 C#의 개요 C# 프로그래밍언어 MS사의앤더스헬스버그 (Anders Hejlsberg) 가고안.NET에최적화된언어컴포넌트지향프로그래밍언어자바의단점을보완 실행방법 : 자바 : 인터프리테이션, C#: 컴파일방법자바언어를대체할수있는언어 C# 의특징 객체지향언어 : 자료추상화델리게이트와이벤트멀티스레드, 예외처리연산자중복, 제네릭 C 계열의언어 C++ 와자바로부터영향을받았음. C:

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas

More information

Studuino소프트웨어 설치

Studuino소프트웨어 설치 Studuino 프로그래밍환경 Studuino 소프트웨어설치 본자료는 Studuino 프로그래밍환경설치안내서입니다. Studuino 프로그래밍 환경의갱신에따라추가 / 수정될수있습니다. 목차 1. 소개... 1 2. Windows... 2 2.1. 프로그래밍환경설치... 2 2.1.1. 웹설치버전설치방법... 2 2.2. Studuino 프로그래밍환경실행...

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

유니티 변수-함수.key

유니티 변수-함수.key C# 1 or 16 (Binary or Hex) 1:1 C# C# (Java, Python, Go ) (0101010 ). (Variable) : (Value) (Variable) : (Value) ( ) (Variable) : (Value) ( ) ; (Variable) : (Value) ( ) ; = ; (Variable) : (Value) (Variable)

More information

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 23 장그래픽프로그래밍 이번장에서학습할내용 자바에서의그래픽 기초사항 기초도형그리기 색상 폰트 Java 2D Java 2D를이용한그리기 Java 2D 를이용한채우기 도형회전과평행이동 자바를이용하여서화면에그림을그려봅시다. 자바그래픽데모 자바그래픽의두가지방법 자바그래픽 AWT Java 2D AWT를사용하면기본적인도형들을쉽게그릴수있다. 어디서나잘실행된다.

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345]) 클래스의응용 클래스를자유자재로사용하자. 이장에서다룰내용 1 객체의치환 2 함수와클래스의상관관계 01_ 객체의치환 객체도변수와마찬가지로치환이가능하다. 기본예제 [7-1] 객체도일반변수와마찬가지로대입이가능하다. 기본예제 [7-2] 객체의치환시에는조심해야할점이있다. 복사생성자의필요성에대하여알아보자. [ 기본예제 7-1] 클래스의치환 01 #include

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

C# 입문 : 이론과 실습

C# 입문 : 이론과 실습 그리기개요 그리기곾렦자료형 도형그리기 문자열그리기 이미지그리기 [2/50] Graphics(System.Drawing.Graphics) 클래스 System.Drawing 네임스페이스에포함 선, 사각형, 타원등과같은도형을그리는데필요한기본적인메소드들이존재 그래픽객체 도형을그리기위해필요한 Graphics 클래스의객체그리기판이되는대상객체를얻거나생성하는방법 1 Paint

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

디지털영상처리3

디지털영상처리3 비트맵 BMP 파일의 실제 BMP 파일의 BMP 파일을 화면에 개요 이해 분석 출력 } 비트맵 (bitmap) 윈도우즈에서영상을표현하기위해사용되는윈도우즈 GDI(Graphic Device Interface) 오브젝트의하나 } 벡터그래픽 (vector graphics) 점, 선, 면등의기본적인그리기도구를이용하여그림을그리는방식 } 윈도우즈 GDI(Graphic

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

var answer = confirm( 확인이나취소를누르세요.); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write( 확인을눌렀습니다.); else { document.write( 취소를눌렀습니다.); 자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트

More information

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont 12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다. 12.1 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont( in LPDIRECT3DDEVICE9 pdevice, in INT Height, in UINT

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

ThisJava ..

ThisJava .. 자바언어에정확한타입을추가한 ThisJava 소개 나현익, 류석영 프로그래밍언어연구실 KAIST 2014 년 1 월 14 일 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 1/29 APLAS 2013 나현익, 류석영 자바 언어에 정확한 타입을 추가한 ThisJava 소개 2/29 실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 나현익,

More information

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 05. 객체의 활용 public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string

More information

Microsoft PowerPoint - 6-PythonGUI-sprite

Microsoft PowerPoint - 6-PythonGUI-sprite (Computer Science with Python and Pygame, Ch.14 introduction to Sprites) 순천향대학교컴퓨터공학과이상정 순천향대학교컴퓨터공학과 1 학습내용 스프라이트클래스 그룹클래스 스프라이트충돌 블록수집게임예 게임레벨증가및점수표시 스프라이트이동 순천향대학교컴퓨터공학과 2 (1) 스프라이트 (sprite) 큰그래픽장면의부분으로사용되는단일

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton

More information

gnu-lee-oop-kor-lec10-1-chap10

gnu-lee-oop-kor-lec10-1-chap10 어서와 Java 는처음이지! 제 10 장이벤트처리 이벤트분류 액션이벤트 키이벤트 마우스이동이벤트 어댑터클래스 스윙컴포넌트에의하여지원되는이벤트는크게두가지의카테고리로나누어진다. 사용자가버튼을클릭하는경우 사용자가메뉴항목을선택하는경우 사용자가텍스트필드에서엔터키를누르는경우 두개의버튼을만들어서패널의배경색을변경하는프로그램을작성하여보자. 이벤트리스너는하나만생성한다. class

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

(Microsoft PowerPoint - hci2-lecture11 [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - hci2-lecture11 [\310\243\310\257 \270\360\265\345]) Overview C# GDI+ GDI (Graphical Device Interface) GDI+ 화면출력 Color, Pen, Brush, Image, Font, Graphics, etc Paint 이벤트, OnPaint() 메소드, Invalidate() 메소드 321190 2015 년가을학기 11/20/2015 박경신 GDI+ GDI (Graphical

More information

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt AWT 컴포넌트 (1) 1. AWT 패키지 2. AWT 프로그램과이벤트 3. Component 클래스 4. 컴포넌트색칠하기 AWT GUI 를만들기위한 API 윈도우프로그래밍을위한클래스와도구를포함 Graphical User Interface 그래픽요소를통해프로그램과대화하는방식 그래픽요소를 GUI 컴포넌트라함 윈도우프로그램만들기 간단한 AWT 프로그램 import

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

슬라이드 1

슬라이드 1 프로세싱 광운대학교로봇학부박광현 프로세싱실행 2 C:\processing-3.2.1 폴더 창나타내기 실행 정지 3 폭 높이 600 400 도형그리기 배경칠하기 5 background(255, 255, 255); R G B background(255, 0, 0); background(255, 122, 0); 선그리기 6 background(255, 122, 0);

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2> 게임엔진 제 4 강프레임리스너와 OIS 입력시스템 이대현교수 한국산업기술대학교게임공학과 학습내용 프레임리스너의개념 프레임리스너를이용한엔터티의이동 OIS 입력시스템을이용한키보드입력의처리 게임루프 Initialization Game Logic Drawing N Exit? Y Finish 실제게임루프 오우거엔진의메인렌더링루프 Root::startRendering()

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

Microsoft PowerPoint - logo_2-미해답.ppt [호환 모드]

Microsoft PowerPoint - logo_2-미해답.ppt [호환 모드] Chap.2 Logo 프로그래밍기초 - 터틀그래픽명령어 ( 기본, 고급 ) 학습목표 터틀의이동과선그리기에대해살펴본다. 터틀의회전에대해살펴본다. 터틀펜과화면제어에대해살펴본다. 2012. 5. 박남제 namjepark@jejunu.ac.kr < 이동하기 > - 앞으로이동하기 forward 100 터틀이 100 픽셀만큼앞으로이동 2 < 이동하기 > forward(fd)

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

H3250_Wi-Fi_E.book

H3250_Wi-Fi_E.book 무선 LAN 기능으로 할 수 있는 것 2 무선 LAN 기능으로 할 수 있는 것 z q l D w 3 Wi-Fi 기능 플로우차트 z q l D 4 Wi-Fi 기능 플로우차트 w 5 본 사용 설명서의 기호 설명 6 각 장별 목차 1 2 3 4 5 6 7 8 9 10 11 12 13 14 7 목차 1 2 3 4 8 목차 5 6 7 8 9 9 목차 10 11 12

More information

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 26 장애플릿 이번장에서학습할내용 애플릿소개 애플릿작성및소개 애플릿의생명주기 애플릿에서의그래픽컴포넌트의소개 Applet API의이용 웹브라우저상에서실행되는작은프로그램인애플릿에대하여학습합니다. 애플릿이란? 애플릿은웹페이지같은 HTML 문서안에내장되어실행되는자바프로그램이다. 애플릿을실행시키는두가지방법 1. 웹브라우저를이용하는방법 2. Appletviewer를이용하는방법

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 CHAPTER 11. 자바스크립트와캔버스로게임 만들기 캔버스 캔버스는 요소로생성 캔버스는 HTML 페이지상에서사각형태의영역 실제그림은자바스크립트를통하여코드로그려야한다. 컨텍스트객체 컨텍스트 (context) 객체 : 자바스크립트에서물감과붓의역할을한다. var canvas = document.getelementbyid("mycanvas"); var

More information

Microsoft PowerPoint PythonGUI-sprite

Microsoft PowerPoint PythonGUI-sprite (Sprite) 순천향대학교컴퓨터공학과 이상정 순천향대학교컴퓨터공학과 1 학습내용 소개 클래스 그룹클래스 충돌 블록수집게임예 게임레벨증가및점수표시 이동 순천향대학교컴퓨터공학과 2 소개 (sprite) 큰그래픽장면의부분으로사용되는단일 2차원이미지 => 쪽화면 게임의장면에서서로상호작용 ( 충돌등 ) 하는물체 => 캐릭터, 아바타 파이게임에서는일반적으로클래스로구현된객체

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

초보자를 위한 C# 21일 완성

초보자를 위한 C# 21일 완성 C# 21., 21 C#., 2 ~ 3 21. 2 ~ 3 21.,. 1~ 2 (, ), C#.,,.,., 21..,.,,, 3. A..,,.,.. Q&A.. 24 C#,.NET.,.,.,. Visual C# Visual Studio.NET,..,. CD., www. TeachYour sel f CSharp. com., ( )., C#.. C# 1, 1. WEEK

More information

슬라이드 1

슬라이드 1 모바일소프트웨어프로젝트 지도 API 1 조 20070216 김성수 20070383 김혜준 20070965 이윤상 20071335 최진 1 매시업? 공개 API? 2 매시업 웹으로제공하고있는정보와서비스를융합하여새로운소프트웨어나서비스, 데이터베이스등을만드는것 < 최초의매시업 > 3 공개 API 누구나사용할수있도록공개된 API 지도, 검색등다양한서비스들에서제공 대표적인예

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 UI 이벤트 Event listener Touch mode Focus handling Notification Basic toast notification Customized toast notification Status bar notification 2 사용자가인터랙션하는특정 View

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - ArrayAdapter ArrayAdapter adapter = new ArrayAdapter(this, android.r.layout.simple_list_item_1,

More information

SOFTBASE XFRAME DEVELOPMENT GUIDE SERIES ActiveX 컴포넌트가이드 서울특별시구로구구로 3 동한신 IT 타워 1215 호 Phone Fax

SOFTBASE XFRAME DEVELOPMENT GUIDE SERIES ActiveX 컴포넌트가이드 서울특별시구로구구로 3 동한신 IT 타워 1215 호 Phone Fax SOFTBASE XFRAME DEVELOPMENT GUIDE SERIES 2012.02.18 서울특별시구로구구로 3 동한신 IT 타워 1215 호 Phone 02-2108-8030 Fax 02-2108-8031 www.softbase.co.kr Copyright 2010 SOFTBase Inc. All rights reserved 목차 1 장 : ActiveX

More information

Microsoft PowerPoint - hci2-lecture11.ppt [호환 모드]

Microsoft PowerPoint - hci2-lecture11.ppt [호환 모드] Overview C# GDI+ GDI (Graphical Device Interface) GDI+ 화면출력 Color, Pen, Brush, Image, Font, Graphics, etc Paint 이벤트, OnPaint() 메소드, Invalidate() 메소드 321190 2011 년가을학기 11/21/2011 박경신 GDI+ GDI (Graphical

More information

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a 6 장복사생성자 객체의생성과대입객체의값에의한전달복사생성자디폴트복사생성자복사생성자의재정의객체의값에의한반환임시객체 C++ 프로그래밍입문 1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y;

More information

C# 입문 : 이론과 실습

C# 입문 : 이론과 실습 C# 언어의고급프로그래밍기법 응용프로그램을보다짜임새있고원론적으로작성가능델리게이트 객체지향특성이반영된메소드포인터이벤트와스레드를처리하는방법론 애트리뷰트 프로그래밍단위 ( 어셈블리, 클래스, 메소드등 ) 에줄수있는추가적인정보언어시스템에서실행시간에다양하게활용할수있는방법을지원 예외처리 실행중에발생하는에러언어시스템에서에러처리를지원 델리게이트 (delegate) 는메소드참조기법객체지향적특징이반영된메소드포인터

More information

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - PLC제어응용-2차시.doc 과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 13 장파일처리 1. 스트림의개념을이해한다. 2. 객체지향적인방법을사용하여파일입출력을할수있다. 3. 텍스트파일과이진파일의차이점을이해한다. 4. 순차파일과임의접근파일의차이점을이해한다. 이번장에서만들어볼프로그램 스트림 (stream) 스트림 (stream) 은 순서가있는데이터의연속적인흐름 이다. 스트림은입출력을물의흐름처럼간주하는것이다. 입출력관련클래스들 파일쓰기

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

SIGIL 완벽입문

SIGIL 완벽입문 누구나 만드는 전자책 SIGIL 을 이용해 전자책을 만들기 EPUB 전자책이 가지는 단점 EPUB이라는 포맷과 제일 많이 비교되는 포맷은 PDF라는 포맷 입니다. EPUB이 나오기 전까지 전 세계에서 가장 많이 사용되던 전자책 포맷이고, 아직도 많이 사 용되기 때문이기도 한며, 또한 PDF는 종이책 출력을 위해서도 사용되기 때문에 종이책 VS

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345]) 입출력 C++ 의효율적인입출력방법을배워보자. 이장에서다룰내용 1 cin 과 cout 을이용한입출력 2 입출력연산자중복 3 조작자생성 4 파일입출력 01_cin 과 cout 을이용한입출력 포맷입출력 C++ 의표준입출력은 cin, cout 을사용한다. C 의 printf 는함수이므로매번여러인자를입력해줘야하지만, cin/cout 에서는형식을한번만정의하면계속사용할수있다.

More information

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2 03 장. 테두리여백지정하는속성 이번장에서는테이블, 레이어, 폼양식등의더예쁘게꾸미기위해서 CSS 를이용하여 HTML 요소의테두리속성을바꾸어보자. 이장에서다룰내용 1 2 3 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2 01. 테두리를제어하는스타일시트 속성값설명 border-width border-left-width

More information

Structure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오.

Structure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오. Structure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, 2018 1 George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오. 실행후 Problem 1.3에 대한 Display결과가 나와야 함) George 그림은 다음과

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 03 모델변환과시점변환 01 기하변환 02 계층구조 Modeling 03 Camera 시점변환 기하변환 (Geometric Transformation) 1. 이동 (Translation) 2. 회전 (Rotation) 3. 크기조절 (Scale) 4. 전단 (Shear) 5. 복합변환 6. 반사변환 7. 구조변형변환 2 기하변환 (Geometric Transformation)

More information

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770> 저 자 약 력이상정순천향대학교컴퓨터학부교수, sjlee@sch.ac.kr 조영일수원대학교컴퓨터학과교수, yicho@suwon.ac.kr 김은성순천향대학교전기전자공학과교수, eskim@sch.ac.kr 박종득공주대학교컴퓨터공학부교수, pjd@kongju.ac.kr C++ 언어는 C 에 C 언어의증가연산자 ++ 를덧붙인 C++ 라는이름이의미하는바와같이 C 언어의문법을대부분그대로사용하면서객체지향프로그래밍기법을추가한

More information