
Xây dựng ứng dụng Painter
Thông tin chi tiết liên hệ : uyvq@bkindex.com or haind@bkindex.com Page 1
Lập trình Advance Painter
Đề tài: Lập trình ứng dụng vẽ đơn giản mô phỏng MS Paint.
Thực hiện bởi nhóm :
Nguyễn Đức Hải
Hà Trọng Sỹ
Vũ Quốc Uy

Xây dựng ứng dụng Painter
Thông tin chi tiết liên hệ : uyvq@bkindex.com or haind@bkindex.com Page 2
Muc lục
Muc lục ................................................................................................................ 2
I. Giới thiệu ......................................................................................................... 3
II. Chức năng ....................................................................................................... 3
1. Chức năng hiện có........................................................................................ 3
2. Chức năng chưa hoàn thành ......................................................................... 3
III. Giao diện ....................................................................................................... 4
IV. Mã nguồn ...................................................................................................... 4
1. Painter.cs ...................................................................................................... 4
2. DrawTool ..................................................................................................... 4
3. PencilTool .................................................................................................... 5
4. Eraser ........................................................................................................... 5
5. LineTool ....................................................................................................... 5
6. RectangleBoundTool: .................................................................................. 6
7. CurveTool, PolygonTool ............................................................................. 6
8. TextTool ....................................................................................................... 6
9. Các lớp còn lại ............................................................................................. 7
V. Lịch sử phát triển ............................................................................................ 7

Xây dựng ứng dụng Painter
Thông tin chi tiết liên hệ : uyvq@bkindex.com or haind@bkindex.com Page 3
PAINTER
I. Giới thiệu
Đây là chương trình mô phỏng MS_Paint của window và có thêm một số
tính năng khác biệt, được viết hoàn toàn bằng C#.Net.
II. Chức năng
1. Chức năng hiện có
- Vẽ bút chì.
- Vẽ đoạn thẳng.
- Vẽ curve.
- Vẽ hình chữ nhật và các hình tương tự: elip, đa giác, ngôi sao, mũi tên, …
- Thay đổi màu và độ dày, di chuyển, resize hình đang vẽ.
- Cắt ảnh (giống chức năng Select của MSPaint).
- Pick Color.
- Tẩy.
- Chèn chữ vào ảnh.
- In ngày tháng.
- Quay 90, 180, 270 độ.
- Undo, Redo.
- Hoạt động theo tab (giống Firefox).
- Open, Save, kéo thả file ảnh vào khung vẽ hiện tại.
2. Chức năng chưa hoàn thành
- Resize panel / hình.
- Croping drawing: Vẽ trong 1 region xác định.
- Thay đổi dạng đường viền và bề mặt của shape (outline & fill).
- Tô màu.
- Phóng to, thu nhỏ.
- Select theo nhiều dạng hình khác nhau.
- Vẽ bằng chuột phải.

Xây dựng ứng dụng Painter
Thông tin chi tiết liên hệ : uyvq@bkindex.com or haind@bkindex.com Page 4
- Rotate, Copy, Paste ảnh/hình đang vẽ.
III. Giao diện
- Dùng thư viện DevExpress để hỗ trợ việc thiết kế giao diện.
- Người dùng có thể tùy chọn skin trong các giao diện có sẵn.
IV. Mã nguồn
Gồm các class sau:
- Painter: Form chính.
- DrawTool: Lớp các công cụ vẽ (lớp cha của các lớp còn lại).
- PencilTool: Vẽ bằng bút chì.
- LineTool: Vẽ đoạn thẳng.
- RectangleBoundTool: Lớp vẽ các hình có khung chữ nhật.
- CurveTool, RectangleTool, EllipTool, PolygonTool, DiamonTool,
UpArrowTool, DownArrowTool, LeftArrowTool, RightArrowTool, Eraser,
SixStarTool, FiveStarTool, FourStarTool, HexagonTool, PentagonTool,
RightTriangleTool, TriangleTool, TextTool, SelectTool: Kế thừa lớp
RectangleBoundTool, thực hiện các chức năng tương ứng với tên lớp.
Mô tả khái quát
1. Painter.cs
Mỗi tab có khung vẽ là 1 Panel màu trắng, kèm theo là 1 Bitmap cùng kích
thước với panel. Bitmap dùng để lưu ảnh đang có trên panel (khi repaint panel
không lưu được ảnh).
Mỗi tab có một List các Bitmap để lưu quá trình vẽ, dùng cho chức năng
Undo, Redo. Lưu ý là khi vẽ shape thì nút Redo sẽ enable, cho thấy là shape
chưa hoàn tất và có thể thay đổi màu / độ dày, khi đó nếu click nút Redo thì
shape sẽ chính thức hoàn tất.
2. DrawTool

Xây dựng ứng dụng Painter
Thông tin chi tiết liên hệ : uyvq@bkindex.com or haind@bkindex.com Page 5
Có hàm tạo với tham số truyền vào là panel, Bitmap và Pen (lưu màu và độ
dày bút vẽ) hiện tại trên form.
Chức năng vẽ hình được thực hiện bằng cách handle các sự kiện
MouseDown, MouseUp, MouseMove.
Phương thức RefreshTool dùng để khởi tạo lại DrawTool khi Panel và
Bitmap thay đổi.
Phương thức EndShape để kết thúc hình đã vẽ dở (nếu hình chưa kết thúc
thì có thể thay đổi màu và độ dày).
Phương thức Cancel để hủy hình đang vẽ và khởi tạo lại DrawTool.
Phương thức DrawToPanel dùng kỹ thuật Double buffering để hình trên
Panel khi đang vẽ không bị nhấp nháy.
Phương thức DrawToBitmap: lưu hình vào Bitmap, chính thức hoàn thành
hình vẽ.
Ngoải ra còn có một số hàm hỗ trợ khác.
3. PencilTool
Kế thừa trực tiếp từ DrawTool, thực hiện chức năng vẽ theo đường đi của
con trỏ chuột.
Có 1 trường thuộc kiểu GraphicsPath để lưu nét vẽ, dùng để vẽ lại khi có
thay đổi màu/độ dày bút vẽ.
Khi MouseMove thì vẽ trực tiếp lên Panel (không dùng double buffering)
để đảm bảo tốc độ vẽ.
4. Eraser
Kế thừa PencilTool.
Tạo một Pen mới màu trắng để không ảnh hưởng đến Pen truyền vào.
5. LineTool
Kế thừa DrawTool.
Có thể thay đổi vị trí 2 mút của đoạn thẳng / tịnh tiến cả đoạn.

