Đây là một tài liệu dùng để biểu diễn cơ bản thiết kế “Mô phỏng trình vẽ Paint phương pháp LTHDT”. Tài liệu này giúp ta có cái nhìn toàn vẹn về cơ cấu và cách xây dựng chương trình, cũng như chức năng của chương trình. Do thời gian có hạn nên còn chưa đầy đủ chức năng như chương trình Paint của MS. Tuy nhiên, những chức năng đó sẽ được bổ sung trong thời gian sớm nhất.
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
………
ĐỀ TÀI : MÔ PHỎNG CHƯƠNG TRÌNH VẼ
HÌNH PAINT
BÁO CÁO CHI TIẾT BÀI TẬP LỚN Môn học: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Thầy hướng dẫn: TS NGUYỄN THÁI BÌNH Sinh viên thực hiện:
HÀ NỘI – 2014
Trang 2Lời Mở đầu
Đây là một tài liệu dùng để biểu diễn cơ bản thiết kế “Mô phỏng trình vẽ Paint phương pháp LTHDT” Tài liệu này giúp ta có cái nhìn toàn vẹn về cơ cấu và cách xây dựng chương trình, cũng như chức năng của chương trình Do thời gian có hạn nên còn chưa đầy
đủ chức năng như chương trình Paint của MS Tuy nhiên, những chức năng đó sẽ được bổ sung trong thời gian sớm nhất
Trong quá trình thiết kế và thực hiện không tránh khỏi sai xót, mong quí thầy cô và các bạn thông cảm và có những góp ý kiến quí báu nhằm hoàn thiện hơn cho sản phẩm
Xin chân thành cảm ơn!
I.Giới thiệu chung
Trang 3Trong xu thế phát triển công nghệ thông tin như vũ bão hiên nay, đặc biệt là trong ngành công nghệ phần mềm ngày càng đòi hỏi trình độ cao trong kĩ thuật lập trình Chính vì vậy mà phương pháp lập trình hướng thủ tục cổ điển trước đây không còn đáp ứng được nhu câu đặt ra của thời đại, một phương lập trình mới được xây dựng theo nguyên lý Alan-Kay đươc ra đời nhằm đáp ứng nhu cầu cấp thiết đó:
“Phương pháp Lập Trình Hướng đối Tượng” Bài tập này được thiết kế theo
phương pháp LTHDT bằng ngôn ngữ C#, ngôn ngữ này được phát triển bởi Micro Soft dựa trên nền tảng của hai ngôn ngữ rất mạnh mẽ là C++ và Java Chính vì thế
mà nó giải quyết được những vướng mắc gặp phải khi thết kế chương trình theo thủ tục thuần túy:
• Mã chương trình rõ ràng, dễ đọc, dễ hiểu, cô đọng
• Chương trình được tổ chức thành các Class lắp ghép lai với nhau thành khối thống nhất
• Mỗi Class gồm nhiều Method đảm nhân các vai trò khác nhau trong chương trình
• Chương trình có tính mềm dẻo cao
• Có khả năng tái sử dụng tài nguyên
II.Chức Năng Yêu Cầu:
Project title: demo_chuong_trinh_paint
Giới thiệu tổng quát:
Đây là một chương trình mô tả các chức năng cơ bản của chương trình vẽ Paint của Micro Soft xây dựng, chương trình được xây dựng bằng ngôn ngữ lập trình C# theo phương pháp Hướng Đối Tượng Chương trình đơn giản cung cấp các chức năng vẽ cơ bản: vẽ hình và tô màu… rất dễ sử dụng và thân thiện với người dùng
Các chức năng chính và chi tiết: Giao diện chương trình được xây dựng theo kiểu “windows form” Các menu theo kiểu đa cấp
1. File
• New: Tạo mới 1 file(trang vẽ ) trống
Trang 4• Open: Mở 1 tệp tin hình ảnh có sẵn.
• Save: Lưu file vào nơi mong muốn
• Exit: Thoát chương trình
2. Edit
• Zoom: Thực hiện phóng to hay thu nhỏ ảnh
3. Draw đoạn thẳng: vẽ đoạn thẳng
4. Fill hình tròn: vẽ và tô mà theo màu của cọ vẽ cho hình tròn
5. Draw đường tròn: vẽ 1 đường tròn
6. Fill hình chữ nhật: vẽ và tô màu của cọ vẽ cho 1 hình chữ nhật
7. Draw hình chữ nhật: vẽ 1 hình chữ nhật rỗng
8. Size: chon kích thươc cho chổi vẽ
9. Chọ màu: chọn màu tô và màu vẽ cho chổi vẽ
Yêu cầu hệ thống:
Cấu hình máy: CPU Pentium III 650 Mhz, RAM 512, VGA 16M trở lên
Hệ điều hành: Window XP trở lên
Yêu cầu hệ thống: Visual Studio 2008 trở lên, Framework 4.0 trở lên Chương trình thao tác vẽ bằng chuột
Giới hạn đề tài:
Do thời gian có hạn nên chưa thể làm được hết các chức năng như của chương trình paint như: người dùng chưa thể vẽ tự do,giao diện còn
sơ sài,chưa đẹp mắt
III.Hình ảnh minh họa và Cấu trúc chương trình:
1. Hình ảnh minh họa:
Giao diện chính của chương trình:
Trang 5Chương trình đang thực hiện vẽ:
Chương trình thực hiện lưu file:
Trang 6Chương trình thực hiện mở file:
Trang 72. Cấu trúc chương trình:
Hình ảnh chương trình được xây dựng trên Visual Studio 2010:
Trang 8Chương trình được xây dựng dựa trên sự kế thừa các Class đã được xây dựng sẵn: graphics, DrawRectangle, DrawFillelipes… vì vậy việc xây dựng chương trình trở nên nhẹ nhàn hơn nhiều
IV Cách xây dựng chương trình:
Cách xây dưng 1 số tính năng trong chương trình:
1- cách thiết kế giao diện
2- cách bắt sự kiện và vẽ 1 số hình cơ bản trong chương trình
3- cách thiết kế và tạo chức năng cho menu(sử dụng các Menu&Toolbar có sẵn)
I -chúng ta thiết kế giao diện dựa trên công cụ ứng dụng winform application
và ngôn ngữ C#
-sử dụng các controls,containers,Menus&toolbars để thiết kế giao diện cho chương trình
Giới thiệu qua về công dụng của các controls được sử dụng trong chương trình:
-button là 1 controls tạo ra 1 nút tương tác với người dùng, cụ thể trong chương trình này là tạo ra các nút giúp người dùng chọn màu hay vẽ
Trang 9hình, button có các thuộc tính và sự kiện khác nhau giúp người lập trình có thể dễ ràng thao tác hay bắt sự kiện trong việc lập trình
-combobox là 1 controls tạo ra 1 hộm thoại mà khi người dùng kích vào sẽ sổ ra 1 loạt các giá trị mà người lập trình đã cài đặt, cụ thể trong này
là kích cỡ của nét vẽ
-panel là 1 containers dùng để chứa các controls -Menustrip là 1 Menus toolbars dùng để thiết kế me nu cho trương trình
Do các controls,containers,Menus&toolb được thiết kế khá thân thiện nên việc thiết kế, sử dụng là khá đơn giản chỉ việc kéo thả vào form như ý muốn II-bắt sự kiện và vẽ
- Trước tiên để vẽ được hình VD: như đoạn thẳng chúng ta phải bắt được sự kiện di chuột,nhấp chuột và nhả chuột và trong c# visual đã
hỗ chợ rất tốt
- Cách vẽ hình:
Đầu tiên ta phải khai báo 2 điểm thuộc Class Point(có sẵn)
“p1”, “p2” qui định tọa độ, trong đo p1: tọa độ điểm bắt đầu nhấp chuột, p2: tọa độ bắt đầu nhả chuột Hai biến nguyên
“dx”, “dy” dùng để lưu chiều rộng(width) và chiều dài(height) của các hình Khai báo 1 biến thuộc Class Pen (pen) dùng để làm bút vẽ ; 1 biến thuộc Class Brush(bs) dùng làm cọ vẽ và 1 biến thuộc lớp Graphics(_grs) dùng để vẽ
Khi vẽ chúng ta cần phải lưu ảnh lại nên chúng ta sử dụng 1 biến thuộc kiểu Bitmap(_bm) để lưu ảnh
Một số đoạn code tiêu biểu:
Hàm điều khiển vẽ:
void Form1_Paint (object sender, PaintEventArgs )
{
Pen pen;
SolidBrush sb;
if (_isdown == true)//_isdown dùng để đánh dấu xem người dùng đang nhấp chuột // hay đang rê chuột.
{
int dx = _p2 - _p1 ;
int dy = _p2 - _p1 ;
Trang 10switch (_currshapemode)//_currshapemode: dùng để xem người dùng muốn
vẽ // -hình gì
{
case shapemode line ://vẽ đường thẳng
pen = new Pen(_currleftcolor,_currpensize);
e Graphics.DrawLine(pen, _p1, _p2);// hàm vẽ
break;
case shapemode fillellipse ://vẽ hình elip
sb = new SolidBrush(_currleftcolor);
e Graphics.FillEllipse(sb,_p1 ,_p1 ,dx,dy);
break;
case shapemode rawellipse ://vẽ đường elip
pen = new Pen(_currleftcolor,_currpensize);
e Graphics.DrawEllipse(pen, _p1 , _p1 ,dx,dy);
break;
case shapemode rawrectangtle :// vẽ hình chữ nhật rỗng
pen = new Pen(_currleftcolor, _currpensize);
e Graphics.DrawRectangle(pen, _p1 , _p1 , dx, dy);
break;
case shapemode fillrectangle :// vẽ hình chữ nhật đặc
sb = new SolidBrush(_currleftcolor);
e Graphics.FillRectangle(sb,_p1 ,_p1 ,dx,dy);
break;
default:
MessageBox.Show( "error" );
break;
}
}
}
Hàm nhấp chuột:
void Form1_MouseDown (object sender, MouseEventArgs )
{
_isdown = true;
_p1 = new Point( Location , Location );
}
private void exitToolStripMenuItem_Click (object sender, EventArgs )
{
Application.Exit();
}
private void bntchonmau_Click (object sender, EventArgs )
{
ColorDialog cld = new ColorDialog();
cld.ShowDialog();
if (cld.ShowDialog() == DialogResult.OK)
{
if (_currbuttoncolor == buttoncolor LEFT )
{
bntmautrai.BackColor = cld.Color;
_currleftcolor = cld.Color;
}
else
{
Trang 11bntmauphai.BackColor = cld.Color;
_currrightcolor = cld.Color;
}
}
}
Hàm rê chuột:
void Form1_MouseMove (object sender, MouseEventArgs )
{
if (_isdown==true)
{
_p2 = new Point( Location , e Location ); // lấy tọa độ cho p2
this.Refresh();
}
lbltoado.Text = e Location .ToString() + "," + e Location .ToString(); }
Hàm thả chuột:
void Form1_MouseUp (object sender, MouseEventArgs )
{
_isdown = false;
Pen pen;
SolidBrush sb;
int dx = _p2 - _p1 ;
int dy = _p2 - _p1 ;
switch (_currshapemode)
{
case shapemode line :
pen = new Pen(_currleftcolor, _currpensize);
_grs.DrawLine(pen, _p1, _p2);
break;
case shapemode fillellipse :
sb = new SolidBrush(_currleftcolor);
_grs.FillEllipse(sb, _p1 , _p1 , dx, dy);
break;
case shapemode rawellipse :
pen = new Pen(_currleftcolor,_currpensize);
_grs.DrawEllipse(pen, _p1 , _p1 ,dx,dy);
break;
case shapemode rawrectangtle :
pen = new Pen(_currleftcolor, _currpensize);
_grs.DrawRectangle(pen, _p1 , _p1 , dx, dy);
break;
case shapemode fillrectangle :
sb = new SolidBrush(_currleftcolor);
_grs.FillRectangle(sb, _p1 , _p1 , dx, dy);
break;
default:
MessageBox.Show( "error" );
break;
}
this.BackgroundImage = (Bitmap)_bm.Clone();
Trang 12}
Ba hàm trên qui định thao tác chuột khi vẽ
Cách lưu lại 1 ảnh khi vẽ xong:
private void saveToolStripMenuItem_Click (object sender, EventArgs )
{
SaveFileDialog sv = new SaveFileDialog();
sv.Filter = "bmp(*.bmp)|*.bmp|jpg(*.jpg)|*.jpg|png(*.png)|*.png" ;
if (sv.ShowDialog() == DialogResult.OK)
{
_bm.Save(sv.FileName);
}
}
Chúng ta chỉ việc tạo ra 1 biến kiểu Bitmap để lưu lại ảnh vừa vẽ
Cách mở 1 ảnh:
private void openToolStripMenuItem_Click (object sender, EventArgs )
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Image files (*.img;*.png;*.jpg;*.peng;*.bmp)|
*.img;*.png;*.jpg;*.peng;*.bmp" ;//các kiểu định dạng ảnh
if (ofd.ShowDialog() == DialogResult.OK)
{
Image img = Image.FromFile(ofd.FileName);
_bm = new Bitmap(img.Width, img.Height);
_grs = Graphics.FromImage(_bm);
Rectangle rec = new Rectangle(0,0,_bm.Width,_bm.Height); _grs.DrawImage(img, rec);
this.Refresh();
this.BackgroundImage = (Bitmap)_bm.Clone();
}
}
NHẬN XÉT CỦA THẦY HƯỚNG DẪN
1 Mục đích và nội dung của bài tập
Trang 13………
………
………
………
2 Kết quả đạt được ………
………
………
………
………
3 Ý thức làm việc của sinh viên ………
………
………
………
Hà Nội, ngày 17 tháng 12 năm 2014
Thầy hướng dẫn (Ký và ghi rõ họ tên)