그래픽디바이스인터페이스 GraphicsTest 프로그램예 MyCanvas 프로그램예 순천향대학교컴퓨터학부이상정 1 그래픽디바이스인터페이스 순천향대학교컴퓨터학부이상정 2
GDI+ 개요 GDI+ 란? GDI(Graphic Device Interface) 란프로그래머가그래픽장치의종류에상관없이그래픽기능을가지는프로그램을작성하도록도와주는 API들의모음.NET 환경에서이전의 GDI 기능을확장한것이 GDI+ 순천향대학교컴퓨터학부이상정 3 GDI+ 그래픽기능 GDI+ 는 2D 벡터그래픽, 이미징, 문자출력기능지원 2D 벡터그래픽 (vector graphic) 점과선을기반으로한그래픽 두개의점으로선표현, 두꼭지점으로사각형표현등 이미징 픽셀 (pixel) 단위의그림파일을편집하는기능 비트맵 (bitmap) 등으로표현된사진이나그림편집 문자출력 시스템폰트를사용하여그래픽장치에문자를출력하는기능 System.Drawing 네임스페이스 GDI+ 의그래픽기능을제공하는클래스정의 순천향대학교컴퓨터학부이상정 4
System.Drawing 주요클래스 (1) Class Bitmap Brush 설명 GDI+ 의비트맵기능을처리하는클래스 선, 점, 사각형등등, 어떤도형을특정색깔로채우기할때사용. Brush 클래스는추상클래스이기때문에직접사용할수는없고, 이클래스에서상속받은클래스를사용. Brushes 표준색상들이정의되어있는클래스 ColorTranslator Font FontFamily Graphics 색깔의표현형식을변환해주는클래스 GDI+ 가출력할문자의글꼴을지정하는클래스비슷한글꼴을그룹으로묶어관리하는클래스 GDI+ 에서의핵심역할을담당하는클래스. 그래픽, 문자등을출력하는클래스 순천향대학교컴퓨터학부이상정 5 System.Drawing 주요클래스 (2) Class Icon Image Pen Pens StringFormat TextureBrush 설명아이콘을담당하는클래스비트맵, 아이콘, 메타파일클래스들의조상이되는추상클래스선의스타일등을지정하는클래스 Pen에서사용할수있는색상들을정의하고있는클래스문자출력스타일에대한정보를처리하는클래스 Brush 클래스가단지색깔을이용해도형을그리는것에비해, 이미지를색깔대신에사용하는클래스 순천향대학교컴퓨터학부이상정 6
Graphics 클래스 Graphics 클래스사용방법 1) 도화지준비 ( 그림을그릴 Image, Bitmap등을생성 ) // 너비 300, 높이 400 의비트맵생성 Bitmap newbitmap = new Bitmap(300, 400); 2) 붓준비 (Pen이나 Brush 객체생성 ) // 노란색, 굵기 3 의펜객체생성 Pen mypen = new Pen(Color.Yellow, 3); // 빨간색솔리드브러시객체생성 Brush mybrush = new SoilidBrush(Color.Red) l d) 3) Graphics 객체생성및그리기 Graphics g = Graphics.FromImage(newBitmap); g.drawline(mypen, Point1, Point2); => Graphics 객체는 new 연산자를사용하지않고다른메쏘드 ( 이를 Factory Method라고함 ) 를이용해자신의객체를할당 순천향대학교컴퓨터학부이상정 7 GraphicsTest 프로그램예 순천향대학교컴퓨터학부이상정 8
2D 벡터그래픽클래스 Method 설명 DrawArc 호를그립니다. DrawBezier 베지어곡선을그립니다. DrawCurve 곡선을그립니다. DrawEllipse 타원을그립니다. DrawLine 선분을그립니다. DrawPath 특정경로를선분으로잇습니다. DrawPie 원을그립니다. DrawPolygon 다각형을그립니다. DrawRectangle 사각형을그립니다. 순천향대학교컴퓨터학부이상정 9 2D 벡터그래픽실행예 순천향대학교컴퓨터학부이상정 10
2D 벡터그래픽예 프로젝트 템플릿 : Windows 응용프로그램 이름 : 12-GraphicsTest Form 컨트롤배치 Group Box Picture Box Radio Button 순천향대학교컴퓨터학부이상정 11 컨트롤속성 Form 컨트롤 [Name]->MainForm, [Text]->GraphicsTest 예제 Picture Box 컨트롤 [Name]->Canvas [BackColor]-[ 사용자지정 ]->White Group Box 컨트롤 [Name]->VectorGroup, [Text]->2D 벡터그래픽 3 개 Radio Button 컨트롤 [Name]->optLine, [Text]->DrawLine [Name]->optEllipse, [Text]->DrawEllipse [Name]->optRect, [Text]->DrawRectangle 순천향대학교컴퓨터학부이상정 12
코드추가및 MouseDown 이벤트처리 MainForm 클래스 (Form1.cs 코드보기 ) 에좌표정보변수선언 // 첫번째좌표, 구조체 Point, Pt1.x Pt1.y private Point Pt1; // 두번째좌표 private Point Pt2; Picture Box 컨트롤 MouseDown 이벤트 마우스버튼눌렀을때좌표를 Pt1 에저장 private void Canvas_MouseDown ( object sender, MouseEventArgs e ) Pt1.X = e.x; Pt1.Y = e.y; 순천향대학교컴퓨터학부이상정 13 MouseUp 이벤트처리 Picture Box 컨트롤 MouseUp 이벤트 마우스버튼 up 한지점에서도형을그림 private void Canvas_MouseUp(object sender, MouseEventArgs e) Pt2.X = e.x; Pt2.Y = e.y; // MainForm을도화지삼아그래픽스객체생성 Graphics g = Canvas.CreateGraphics(); CreateGraphics(); // 사용할펜을생성합니다. Pen mypen = new Pen(Color.Blue, 10); // 선분그리기모드라면 if (optline.checked == true) g.drawline(mypen, Pt1, Pt2); // 타원그리기모드라면.. else if (optellipse.checked == true) g.drawellipse(mypen, Pt1.X, Pt1.Y, Pt2.X - Pt1.X, Pt2.Y - Pt1.Y); else // 이도저도아닌사각형그리기라면.. g.drawrectangle(mypen, Pt1.X, Pt1.Y, Pt2.X - Pt1.X, Pt2.Y - Pt1.Y); 순천향대학교컴퓨터학부 이상정 14
이미징클래스 Method 설명 DrawIcon 정해진영역안에아이콘을그립니다. DrawIconUnstretched DrawIcon과같은일을하지만아이콘본래의크기대로아이콘을그립니다. DrawImage 본래의크기로이미지를그립니다. DrawImageUnscaled 좌표쌍에의해정의된좌표에이미지를그립니다. 순천향대학교컴퓨터학부이상정 15 Bitmap 클래스사용예 실행예 GroupBox Button TextBox 순천향대학교컴퓨터학부이상정 16
컨트롤속성 Group Box 컨트롤 [Text]-> 이미징 Button 컨트롤 [Name]->ImageBtn, [Text]-> 이미지불러오기 Text Box 컨트롤 [Name]->txtImage, [Text]->"" [MultiLine]->True 순천향대학교컴퓨터학부이상정 17 버튼 Click 이벤트처리 12-GraphicsTest bin Release 디렉토리에 CatCity.bmp 파일을미리복사 Button 컨트롤의 Click 이벤트처리 private void ImageBtn_Click ( object sender, EventArgs e ) // CatCity.bmp 파일로부터 mybmp 객체를생성합니다. Bitmap mybmp = new Bitmap(Application.StartupPath + " CatCity.bmp"); Graphics g = Canvas.CreateGraphics(); g.drawimage(mybmp, 0, 0); //mybmp 에담겨있는이미지를 Canvas 에그립니다. // r은라인의끝, n은라인의시작을가리키는이스케입문자입니다. tti txtimage.appendtext(" t(" 높이 :"+ mybmp.height + " "); txtimage.appendtext(" 너비 : " + mybmp.width + " r n"); txtimage.appendtext(" 수평해상도 : " + mybmp.horizontalresolution + " "); txtimage.appendtext(" 수직해상도 : " + mybmp.verticalresolution + " r n"); 순천향대학교컴퓨터학부이상정 18
문자출력예 문자출력클래스 Method DrawString() 화면에문자를출력한다. 설명 GroupBox TextBox Button 순천향대학교컴퓨터학부이상정 19 컨트롤속성 Group Box 컨트롤 [Text]-> 문자출력 Text Box 컨트롤 [Name]->txtDraw, [Text]->"" [MultiLine]->True Button 컨트롤 [Name]->TypoBtn, [Text]->Canvas 에출력 순천향대학교컴퓨터학부이상정 20
버튼 Click 이벤트처리 Button 컨트롤의 Click 이벤트처리 private void TypoBtn_Click ( object sender, EventArgs e ) // MainForm을도화지삼아그래픽스객체생성 Graphics g = Canvas.CreateGraphics ( ); //Graphics 가사용할브러쉬생성 Brush mybrush = new SolidBrush ( Color.Red ); // 폰트생성 Font myfont = new Font ( " 굴림 ", 12 ); //Canvas의너비와높이를재서 r에크기를저장합니다. RectangleF r = new RectangleF ( 0, 0, Canvas.Width, Canvas.Height ); //txtdraw의내용을출력합니다. txtdraw의내용이 Canvas의너비를 // 벗어날만큼길다면자동으로줄이바뀌어출력됩니다. g.drawstring g ( txtdraw.text, myfont, mybrush, r ); 순천향대학교컴퓨터학부이상정 21 MyCanvas 프로그램예 순천향대학교컴퓨터학부이상정 22
MyCanvas 프로그램소개 GDI+ 기능을테스트 이미지파일을읽어서이미지처리 2D 그래픽표시, 문자출력등의기본기능 수정된내용을파일에저장 순천향대학교컴퓨터학부이상정 23 실행예- 색변환 순천향대학교컴퓨터학부이상정 24
실행예- 문자출력 순천향대학교컴퓨터학부이상정 25 프로젝트생성및폼추가 프로젝트새로만들기 [ 파일 ]-[ 새프로젝트 ] [ 템플릿 ]-> Windows 응용프로그램, [ 이름 ]->12-MyCanvas 파일이름변경 Form1.cs -> MainForm.cs Program.cs -> MainApp.cs 폼 3 개추가 파일복사나이동시대상폴더를선택하는폴더다이얼로그추가 [ 솔루션탐색기 ]-> "12-MyCanvas" 선택, 마우스오른쪽버튼 [ 추가 ]-Windows Form, [ 템플릿 ]-> Windows Form, [ 이름 ]->TextDlg.cs [ 추가 ]-Windows Form, [ 템플릿 ]-> Windows Form, [ 이름 ]->ConvertClrDlg.cs [ 추가 ]-Windows Form, [ 템플릿 ]-> Windows Form, [ 이름 ]->AboutDlg.cs 순천향대학교컴퓨터학부이상정 26
MainForm.cs 폼컨트롤배치 MenuStrip PictureBox ToolStrip OpenFileDialog SaveFileDialog ColorDialog 순천향대학교컴퓨터학부이상정 27 컨트롤속성 Form 컨트롤 [Name]->MainForm, [Text]->MyCanvas Picture Box 컨트롤 [Name]->Canvas OpenFileDialog 컨트롤 [Name]->OpenDlg, [Filter]-> 비트맵파일 (*.bmp) *.bmp 모든파일 (*.*) *.* SaveFileDialog 컨트롤 [Name]->SaveDlg, [Filter]-> 비트맵파일 (*.bmp) *.bmp bmp 모든파일 (*.*) *.**) * * ColorDialog 컨트롤 [Name]->ColorDlg 순천향대학교컴퓨터학부이상정 28
메뉴항목구성 (1) MenuStrip 컨트롤 [Name]->MainMN File, Shape, Help 주메뉴 [Name]->menu_File, [Text]->&File [Name]->menu_Shape, [Text]->&Shape [Name]->menu_Help, [Text]->&Help File 하위메뉴 New, Open, Save, Separator, Exit 하위메뉴 [Name]->menu_File_New, [Text]->&New, [ShortcutKeys]->Ctrl+N [Name]->menu_File_Open, [Text]->&Open, [ShortcutKeys]->Ctrl+O [Name]->menu_File_Save, [Text]->&Save, [ShortcutKeys]->Ctrl+S S [Name]->toolStripSeparator1 [Name]->menu_Exit, [Text]->E&xit, [ShortcutKeys]->Ctrl+X 순천향대학교컴퓨터학부이상정 29 메뉴항목구성 (2) Shape 하위메뉴 Line, Rectangle, Circle, Free Draw, TextOut, Separator, Color, ConvertColor 하위메뉴 [Name]->menu_Shape_Line, [Text]->&Line [Name]->menu_Shape_Rect, [Text]->&Rectangle [Name]->menu_Shape_Circle, [Text]->&Circle [Name]->menu_Shape_Free, [Text]->Free &Draw [Name]->menu_Shape_Text, [Text]->&TextOut [Name]->toolStripSeparator2 [Name]->menu_Shape_Color, [Text]->Colo&r [Name]->menu_Shape_Convert, [Text]->Con&vertColor Help 하위메뉴 About 하위메뉴 [Name]->menu >menu_help_about, [Text]->&About 순천향대학교컴퓨터학부이상정 30
툴바항목구성 ToolStrip 속성 [Name]->MainTB 툴바아이템 13 개 (10 개버튼,3 개 separator) 추가 [ 속성창 ]-[Items]-[ ]-[ 아이템컬렉션편집기 ] 또는 이미지는 07-Csharp-Image 12-MyCanvas 디렉토리참조 [Name]->NewBtn, [Image]->New.ico, [ToolTipText]-> 새파일 [Name]->OpenBtn, [Image]->Open.ico, [ToolTipText]-> 파일열기 [Name]->SaveBtn, [Image]->Save.ico, [ToolTipText]-> 파일저장 [Name]->toolStripSperator3 [Name]->LineBtn, [Image]->Line.ico, [ToolTipText]-> 직선 [Name]->RectBtn, [Image]->Rectangle.ico, [ToolTipText]-> 사각형 [Name]->CirceltBtn, [Image]->Circle.ico, [ToolTipText]-> 원 [Name]->FreeBtn, [Image]->Free.ico, [ToolTipText]->Free Draw [Name]->TextBtn, [Image]->textOut.ico, [ToolTipText]-> 문자출력 [Name]->toolStripSperator4 [Name]->ConvertClrBtn, [Image]->ConvertClr.ico, [ToolTipText]-> 색을변환합니다. [Name]->toolStripSperator5 [Name]->ColorBtn, [DisplayStyle]->Text, [Text]->Color 순천향대학교컴퓨터학부이상정 31 TextDlg.cs 폼컨트롤배치 TextDlg 폼 [Shape] 메뉴-[Textout], 툴바 [T] 선택시표시 글꼴및크기선택, 텍스트출력 GroupBox Form Button TextBox Label Button FontDialog 순천향대학교컴퓨터학부이상정 32
컨트롤속성 Form 컨트롤 [Name]->TextDlg, [Text]->Text Out, [FormBorderStyle]->FixedDialog, [MaximizeBox]->False, [MinimizeBox]->False FontDialog 컨트롤 [Name]->FontDlg Group Box 컨트롤 [Name]->FontGroup, [Text]->Font Label 컨트롤 2개 [Name]->FontName, [Text]-> 글꼴 [Name]->FontSize, [Text]-> 크기 TextBox 컨트롤 3개 [Name]->txtFont, [Text]->"" [Name]->txtSize, [Text]->" [Name]->txtContents, [MultiLine]->True, [Text]->" Button 컨트롤 2개 [Name]->FontBtn, [Text]-> 글꼴변경 [Name]->OKBtn, [Text]-> 확인 순천향대학교컴퓨터학부이상정 33 ConvertClrDlg.cs 폼컨트롤배치 ConvertClrDlg 폼 특정픽셀의색을수정하는다이얼로그 Form GroupBox Label PictureBox ColorDialog Button 순천향대학교컴퓨터학부이상정 34
컨트롤속성 Form 컨트롤 [Name]->ConvertClrDlg, [Text]->Text Out, [FormBorderStyle]- >FixedDialog, [MaximizeBox]->False, [MinimizeBox]->False Group Box 컨트롤 [Name]->FontGroup, [Text]->Font Label 컨트롤 2개 [Name]->FontName, N [Text]-> 글꼴 [Name]->FontSize, [Text]-> 크기 TextBox 컨트롤 3개 [Name]->txtFont, [Text]->"" [Name]->txtSize, [Text]->"" [Name]->txtContents,,[MultiLine]->True,,[Text]->"" Button 컨트롤 2개 [Name]->FontBtn, [Text]-> 글꼴변경 [Name]->OKBtn >OKBtn, [Text]-> 확인 순천향대학교컴퓨터학부이상정 35 AboutDlg.cs 폼컨트롤 AboutDlg 폼 프로그램정보다이얼로그 Form Label Form 컨트롤 [Name]->AboutDlg, [Text]->myCanvas 정보, [FormBorderStyle]- >FixedDialog, [MaximizeBox]->False, [MinimizeBox]->False Label 컨트롤 2개 [Name]->ProgramInfo, [Text]->myCanvas 1.0, [Font]-> 굴림 / 크기 :14/ 굵게 [Name]->LicenseInfo, [AutoSize]->False, [Text]-> 순천향대학교정보기술공학부윈도우프로그래밍 Button 컨트롤 [Name]->OKBtn, [Text]-> 확인 Button 순천향대학교컴퓨터학부이상정 36
MainForm 클래스 : 좌표, 색상, 그리기모드코드 // 시작점 private Point Point1; // 종료점 private Point Point2; // 그릴때사용할색깔에대한정보를가집니다. private Color mycolor; // mycolor 변수에선택한색정보를저장합니다. public void SetColor() // 대화상자표시, 색선택, 선택된색저장 if (ColorDlg.ShowDialog() == DialogResult.OK) mycolor = ColorDlg.Color; // Color 툴바색변경 ColorBtn.BackColor = mycolor; // 어떤도형을그릴지에대한정보를가집니다. private int DrawMode; // 어떤도형을그릴지결정하기 public void SetShape(int i) DrawMode = i; enum Shape : int Line, Rect, Circle, FreeLine, Text, ConvertColor 순천향대학교컴퓨터학부이상정 37 MainForm 클래스 : // 직선을그립니다. 기본도형그리기코드 (1) private void DrawLine(Pen mypen, Graphics g) g.drawline(mypen, Point1, Point2); // 사각형을그립니다. private void DrawRectangle(Pen mypen, Graphics g) int x, y, width, height; if (Point1.X <= Point2.X) x = Point1.X; width = Point2.X - x; else x = Point2.X; width = Point1.X - x; if (Point1.Y <= Point2.Y) y = Point1.Y; else height ht = Point2.Y - y; y = Point2.Y; height = Point1.Y - y; g.drawrectangle(mypen, x, y, width, height); 순천향대학교 컴퓨터학부이상정 38 // 원을그립니다. private void DrawCircle(Pen mypen, Graphics g) int x, y, width, height; if (Point1.X <= Point2.X) x = Point1.X; width = Point2.X - x; else x = Point2.X; width = Point1.X - x; if (Point1.Y <= Point2.Y) y = Point1.Y; height = Point2.Y - y; else y = Point2.Y; height = Point1.Y - y; g.drawellipse(mypen, x, y, width, height);
MainForm 클래스 : 기본도형그리기코드 (2) // 자유곡선을그립니다. private void DrawFreeLine(Pen mypen, Graphics g) g.drawline(mypen, Point1, Point2); // 도형그리기 private void DrawShape() Pen mypen = new Pen(myColor, 3); Graphics g = Graphics.FromImage(Canvas.Image); I switch (DrawMode) case (int)shape.line: DrawLine(myPen, g); break; case (int)shape.rect: DrawRectangle(myPen, g); break; case (int)shape.circle: DrawCircle(myPen, g); break; case (int)shape.freeline: DrawFreeLine(myPen, g); break; 순천향대학교컴퓨터학부이상정 39 case (int)shape.text: t Brush mybrush = new SolidBrush(myColor); DrawText(myBrush, g); break; case (int)shape.convertcolor: ConvertColor(); break; Canvas.Refresh(); // 이미지의변경사항을반영합니다. // Canvas 에출력할텍스트의글꼴 private static Font myfont; // Canvas 에출력할텍스트 private static string contents; MainForm 클래스 : 문자출력코드 // 글꼴 public static Font myfont get return myfont; set myfont = value; // 출력할내용 public static string Contents get return contents; set contents = value; 순천향대학교 컴퓨터학부이상정 40 // 문자를출력합니다. private void DrawText(Brush mybrush, Graphics g) TextDlg mytextdlg = new TextDlg(); // TextDlg 대화상자를띄워서글꼴과 mytextdlg.showdialog(this); // 출력할내용에대한정보를입력받습니다. g.drawstring(contents, myfont, mybrush, Point2); // 내용을출력하고 Contents = ""; // 변수의내용을삭제합니다.
TextDlg 클래스 : 이벤트처리 (1) [ 글꼴변경 ][ ],[ 확인 ] 버튼 Click 이벤트처리 순천향대학교컴퓨터학부이상정 41 TextDlg 클래스 : 이벤트처리 (2) private void FontBtn_Click(object sender, EventArgs e) // 폰트대화상자표시, 선택후텍스트박스에저장표시 if (FontDlg.ShowDialog(this) == DialogResult.OK) txtfont.text = FontDlg.Font.Name; txtsize.text = Convert.ToString(FontDlg.Font.Size); private void OKBtn_Click(object t sender, EventArgs e) try Font newfont = new Font(txtFont.Text, Convert.ToSingle(txtSize.Text)); MainForm.myFont = newfont; MainForm.Contents = txtcontents.text; this.close(); // Textdlg를닫습니다. catch (Exception fonte) MessageBox.Show(this, "Font의종류를선택해주세요."); 순천향대학교컴퓨터학부이상정 42
MainForm 클래스 : 색상변환코드 private static Color sourcecolor; private static Color targetcolor; // 원본색상 public static Color SourceColor get return sourcecolor; set sourcecolor = value; // 대상색상 public static Color TargetColor get return targetcolor; set targetcolor = value; 순천향대학교컴퓨터학부이상정 43 private void ConvertColor() // Canvas.Image를이용해 Bitmzp 객체를생성합니다. Bitmap tempbmp = new Bitmap(Canvas.Image); // 마우스로찍었던픽셀의색을얻어와 SourceColor에저장합니다. Color tempcolor = tempbmp.getpixel(point2.x, tpi i t2 Point2.Y); SourceColor = tempcolor; //ConvertClrDlg를띄워 TargetColor에바꿀색을입력받습니다. ConvertClrDlg myconvertclrdlg = new ConvertClrDlg(); myconvertclrdlg.showdialog(this); //tempbmp의각픽셀을돌면서 SetPixel() 을이용해색을바꿉니다. for (int i = 0; i < tempbmp.height; i++) for (int j = 0; j < tempbmp.width; j++) if (tempbmp.getpixel(j, i) == SourceColor) tempbmp.setpixel(j, tpi i, TargetColor); // 변경된 tempbmp 를 Canvas.Image 에저장합니다. Canvas.Image = tempbmp; ConvertClrDlg 클래스 : 이벤트처리 (1) [ConvertClrDlg] 폼 Load 이벤트처리 [ 바꿀색상 ] PictureBox Click 이벤트처리 [ 확인 ] 버튼 Click 이벤트처리 순천향대학교컴퓨터학부이상정 44
ConvertClrDlg 클래스 : 이벤트처리 (2) private void ConvertClrDlg_Load(object sender, EventArgs e) SrcClrBox.BackColor = MainForm.SourceColor; private void TrgClrBox_Click(object sender, EventArgs e) if (ColorDlg.ShowDialog(this) == DialogResult.OK) TrgClrBox.BackColor = ColorDlg.Color; //TrgClrBox 의배경색도바꾸고 MainForm.TargetColor = ColorDlg.Color; //MainForm 의 TargetColor 도바꿉니다. private void OKBtn_Click(object sender, EventArgs e) this.close(); 순천향대학교컴퓨터학부이상정 45 MainForm 클래스 : 파일관련코드 (1) // 새파일만들기 public void NewDocument() //Canvas.Image에이미지가있다면저장 if (Canvas.Image!= null) SaveDocument(); //Canvas 의너비와높이가같은 Bitmap 객체를생성 Bitmap newbitmap = new Bitmap(Canvas.Width, Canvas.Height); Canvas.Image = newbitmap; //Canvas를하얀색으로칠합니다. Brush mybrush = new SolidBrush(Color.White); Graphics g = Graphics.FromImage(Canvas.Image); g.fillrectangle(mybrush, 0, 0, Canvas.Image.Width, Canvas.Image.Height); // 사용할색을검정색으로설정합니다. mycolor = Color.Black; ColorBtn.BackColor = mycolor; 순천향대학교 컴퓨터학부이상정 46 // 파일열기 public void OpenDocument() try if (Canvas.Image!= null) SaveDocument(); if (OpenDlg.ShowDialog() == DialogResult.OK) Canvas.Image = Image.FromFile(OpenDlg.FileName); catch (Exception opene) // 파일을열때예외상황이발생하면예외내용을 // 사용자에게알립니다. MessageBox.Show(this, " 파일을여는데오류가발생하였습니다. : " + opene.message, "mycanvas", MessageBoxButtons.OK, MessageBoxIcon.Error);
MainForm 클래스 : 파일관련코드 (2) // 파일저장 public void SaveDocument() // 먼저그림판이비어있나검사하고 if (Canvas.Image!= null) // 비어있지않다면작업중인문서를저장합니다. if (MessageBox.Show(this, " 저장하시겠습니까?",?, "mycanvas", MessageBoxButtons.YesNo) == DialogResult.Yes) //SaveDlg를띄워파일이름을선택하게한후 if (SaveDlg.ShowDialog() ShowDialog() == DialogResult.OK) // 문서를저장합니다. Canvas.Image.Save(SaveDlg.FileName); 순천향대학교컴퓨터학부이상정 47 MainForm 클래스 : 메뉴이벤트처리 (1) [MainForm] 폼 Load 이벤트처리 메뉴 Click 이벤트처리 public MainForm() InitializeComponent(); private void MainForm_Load(object sender, EventArgs e) NewDocument(); private void menu_file_new_click(object sender, EventArgs e) NewDocument(); private void menu_file_open_click(object sender, EventArgs e) OpenDocument(); private void menu_file_save_click(object sender, EventArgs e) SaveDocument(); 순천향대학교컴퓨터학부이상정 48 private void menu_exit_click(object sender, EventArgs e) if (MessageBox.Show(this, " 종료하시겠습니까?", "mycanvas", MessageBoxButtons.OKCancel) == DialogResult.OK) Application.Exit();
private void menu_shape_line_click(object sender, EventArgs e) SetShape((int)Shape.Line); private void menu_shape_rect_click(object sender, EventArgs e) SetShape((int)Shape.Rect); private void menu_shape_circle_click(object sender, EventArgs e) SetShape((int)Shape.Circle); private void menu_shape_free_click(object sender, EventArgs e) SetShape((int)Shape.FreeLine); private void menu_shape_text_click(object sender, EventArgs e) SetShape((int)Shape.Text); private void menu_shape_color_click(object sender, EventArgs e) SetColor(); 순천향대학교컴퓨터학부이상정 49 MainForm 클래스 : 메뉴이벤트처리 (2) private void menu_shape_convert_click(object sender, EventArgs e) SetShape((int)Shape.ConvertColor); private void menu_help_about_click(object sender, EventArgs e) AboutDlg myaboutdlg = new AboutDlg(); myaboutdlg.showdialog(this); MainForm 클래스 : 툴바이벤트처리 툴바 Click 이벤트처리 private void NewBtn_Click(object sender, EventArgs e) NewDocument(); private void OpenBtn_Click(object sender, EventArgs e) OpenDocument(); private void SaveBtn_Click(object sender, EventArgs e) SaveDocument(); private void LineBtn_Click(object sender, EventArgs e) SetShape((int)Shape.Line); private void RectBtn_Click(object sender, EventArgs e) SetShape((int)Shape.Rect); p ) 순천향대학교컴퓨터학부이상정 50 private void CircleBtn_Click(object sender, EventArgs e) SetShape((int)Shape.Circle); private void FreeBtn_Click(object sender, EventArgs e) SetShape((int)Shape.FreeLine); private void TextBtn_Click(object sender, EventArgs e) SetShape((int)Shape.Text); private void ConvertClrBtn_Click(object Click(object sender, EventArgs e) SetShape((int)Shape.ConvertColor); private void ColorBtn_Click(object Click(object sender, EventArgs e) SetColor();
MainForm 클래스 : 마우스이벤트처리 [Canvas] PictureBox MouseDown/ MouseUp/MouseMove 이벤트처리 private void Canvas_MouseDown(object sender, MouseEventArgs e) Point1.X = e.x; Point1.Y = e.y; private void Canvas_MouseUp(object sender, MouseEventArgs e) Point2.X = e.x; Point2.Y = e.y; DrawShape(); private void Canvas_MouseMove(object sender, MouseEventArgs e) if (e.button == MouseButtons.Left) // 마우스왼쪽버튼을눌렀다면 // 그리기모드가자유곡선그리기일때만 if (DrawMode == (int)shape.freeline) ) Point2.X = Point1.X; 순천향대학교컴퓨터학부이상정 51 Point2.Y = Point1.Y; Point1.X = e.x; Point1.Y = e.y; DrawShape(); AboutDlg 클래스 : 이벤트처리 [ 확인 ] 버튼 Click 이벤트처리 private void OKBtn_Click(object sender, EventArgs e) Close(); 순천향대학교컴퓨터학부이상정 52
실행예 순천향대학교컴퓨터학부이상정 53 실행예- 색변환 순천향대학교컴퓨터학부이상정 54
실행예- 문자출력 순천향대학교컴퓨터학부이상정 55 과제 이장에서소개된 GraphicsTest 또는 MyCanvas 를개선 한프로그램 디자인변경또는새로운기능추가 순천향대학교컴퓨터학부이상정 56