Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 60 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
60
Dung lượng
1,89 MB
Nội dung
GDI+ Lập trình Windows GDI+ GDI: Graphical Device Interface GDI+ API (Application programming interface) cung cấp lớp Tạo đồ họa 2D vector Thao tác font Hiển thị ảnh Thư viện FCL chứa lớp thao tác vẽ System.Drawing Tất thao tác tô vẽ form thực chức GDI+ System.Drawing System.Drawing Font FontFamily Graphics Icon class Color Point structure Rectangle Size Pen Region SolidBrush TextureBrush Image Brush HatchBrush LinearGradientBrush PathGradientBrush SolidBrush TextureBrush Đồ họa Màn hình giống khung vẽ - canvas Chương trình phải vẽ nội dung cửa sổ Các thành phần GUI tự vẽ Những thứ khác: lập trình viên Làm để vẽ? Khi phải vẽ? Làm để vẽ - Pixel Hệ tọa độ Cartesean lật ngược lại! (0,0) (0,height) (width,0) (width, height) Đơn vị Graphics.PageUnit: xác định đơn vị bề mặt GraphicsUnit.Pixel (default) GraphicsUnit.Inch GraphicsUnit.Milimeter GraphicsUnit.Point Graphics.PageScale: tỷ lệ output g.PageScale = 1f (default) Một số kiến thức Độ phân giải theo pixel 1024x768, 1920x1080… Độ sâu màu (số lượng bit màu pixel) 6, 16, 24, 32 Không gian màu (số lượng màu thực sự) bit: 256 màu 16 bit: 65536 màu Hệ thống phân cấp Mỗi thành phần có khu vực riêng Có hệ thống tọa độ riêng Clipping Không thể vẽ bên khu vực Không thể vẽ đè lên thành phần khác? (0,0) Panel (0,0) Button Button (wb, hb) (wp, hp) Làm để vẽ Panel thích hợp cho khu vực vẽ tùy biến Panel 10 Cấu trúc liệu cho đối tượng đồ họa cách tiếp cận – Riêng kết hợp Lưu nội dung logic cấu trúc liệu, vẽ dựa liệu Vd chương trình vẽ: đường, hình, màu… Vd chương trình trực quan hóa: bảng liệu • Lưu nội dung thị giác ảnh off-screen (bitmap) • Ví dụ pixel • Sau sử dụng g.DrawImage kiện paint 46 Kết hợp – Khả Nếu lưu giữ đối tượng: cho phép hiệu chỉnh lại đối tượng đồ họa, gom nhóm, z-index… Bài toán hit test Khóa không chỉnh sửa: rasterization Layer 47 Vấn đề flicker – Nháy 48 Giảm nháy Sử dụng thuộc tính DoubleBuffered DoubleBuffered = true; Sử dụng hàm SetStyle SetStyle(ControlStyles.OptimizedDoubleBuffer, true); 49 Tự tạo đệm Bộ đệm mặc định BufferedGraphicsContext myContext; myContext = BufferedGraphicsManager.Current; Tạo đệm riêng để vẽ tạm BufferedGraphicsContext myContext; myContext = new BufferedGraphicsContext(); // Chèn code tạo đồ họa // Cần ý phải Dispose myContext.Dispose(); 50 Thao tác đệm tự tạo BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current; BufferedGraphics myBuffer = currentContext.Allocate(this.CreateGraphics(), this.DisplayRectangle); myBuffer.Graphics.DrawEllipse(Pens.Blue, this.DisplayRectangle); myBuffer.Render(); // Surface mặc định myBuffer.Render(this.CreateGraphics()); // Surface # 51 Một số kĩ thuật hỗ trợ tạo đối tượng vẽ 52 Sử dụng Design pattern Factory Prototype 53 Vấn đề Factory Pattern Framework cần phải tạo thể lớp biết lớp trừu tượng mà lớp cụ thể Ví dụ làm bánh Bakery * bread A Factory Method Johnson's Bakery Baked by Johnson * + bake Bread () : void 54 Ví dụ người làm vườn Frui t gardener {abstract} Appl e gardener Strawberry gardener Frui t * {abstract} Grape gardener 55 Ví dụ tác giả sản phẩm Product {abstract} ContreteProduct Creator {abstract} ConcreteCreator 56 Ví dụ ứng dụng tạo tài liệu Document {abstract} * Application {abstract} + CreateDocument () : bool + NewDocument () : bool + OpenDocument () : bool DrawingApplication The Factory Method ImgzipApplication 57 Cài đặt cho toán chức danh 58 Xét toán vẽ Lựa chọn hình để vẽ Gán sẵn button đối tượng tương ứng Khi click vào tạo hàm Clone Không phải switch Mẫu Prototype 59 Sơ đồ lớp mẫu Prototype 60 [...]... được tô 32 Form có dạng NonRectangle Bước 1: Tạo ứng dụng Windows Application Thiết kế Form có dạng như sau FormBorderStyle = none 33 Form có dạng NonRectangle Bước 2: Thiết lập các thuộc tính cho Form như sau: TransparencyKey = Control: màu sẽ trong suốt khi vẽ trên Form FormBorderStyle = None: Form không có đường biên Thiết lập màu nền cho 2 Label là Transparent Phần background của 2 label... trên Form FormBorderStyle = None: Form không có đường biên Thiết lập màu nền cho 2 Label là Transparent Phần background của 2 label sẽ tiệp với nền bên dưới 34 Form có dạng NonRectangle Bước 3: Tạo trình xử lý cho sự kiện Paint 35 Khi nào phải vẽ lại? 36 ... TextureBrush Đồ họa Màn hình giống khung vẽ - canvas Chương trình phải vẽ nội dung cửa sổ Các thành phần GUI tự vẽ Những thứ khác: lập trình viên Làm để vẽ? Khi phải vẽ? Làm để vẽ - Pixel... NonRectangle Bước 1: Tạo ứng dụng Windows Application Thiết kế Form có dạng sau FormBorderStyle = none 33 Form có dạng NonRectangle Bước 2: Thiết lập thuộc tính cho Form sau: TransparencyKey... FormBorderStyle = None: Form đường biên Thiết lập màu cho Label Transparent Phần background label tiệp với bên 34 Form có dạng NonRectangle Bước 3: Tạo trình xử lý cho kiện Paint 35 Khi phải vẽ