Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

37 481 2
Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình C Windows Thư viện đồ họa GDI (Graphics Device Interface) Nguyễn Tri Tuấn Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@ fit.hcmuns.edu.vn Nội dung Giới thiệu Các khái niệm Các ví dụ vẽ hình đồ họa Xử lý ảnh Bitmap In ấn (Printing) C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 Giới thiệu GDI thư viện cung cấp hàm (functions) cấu trúc liệu (structures) cần thiết để ứng dụng tạo kết xuất dạng đồ họa (hiển thị lên hình, in máy in,…) Các hàm GDI cho phép vẽ đường thẳng, đường cong, hình đa giác, xuất ký tự, hiển thị ảnh bitmap, in ấn,… GDI không tương tác trực tiếp với thiết bị phần cứng, mà thông qua driver C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 Các khái niệm Thiết bị đồ họa (Graphics device) Ngữ cảnh thiết bị (DC - Device Context) DC MFC Đối tượng vẽ (Drawing object) Đối tượng vẽ MFC C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 Các khái niệm - Thiết bị đồ họa Thiết bị đồ họa (Graphics device): thiết bị cho phép thể kết xuất dạng đồ họa Thiết bị vật lý (physical device): thiết bị thật hình, cửa sổ, máy in,… Thiết bị “ảo” (logical device): thiết bị giả lập nhớ, gọI “memory device”, có tác dụng mơ thiết bị vật lý Thư viện GDI cho phép thực lệnh vẽ thiết bị vật lý lẫn logic C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 Các khái niệm - Ngữ cảnh thiết bị Ngữ cảnh thiết bị (Device Context): cấu trúc lưu trữ thông số thiết bị đồ họa, ví dụ: Chế độ vẽ (drawing mode), Vị trí bút vẽ (pen position), Các đối tượng vẽ (Pen, Brush, Font) … Các thông số chi phối thao tác vẽ lên thiết bị thời điểm thực Mỗi thiết bị đặc trưng cấu trúc DC C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 Các khái niệm - Ngữ cảnh thiết bị…(tt) Ứng dụng thực thao tác vẽ lên thiết bị thông qua DC thiết bị DC xem phương tiện liên kết ứng dụng thiết bị, giúp tạo nên tính độc lập thiết bị (Device Independent) cho ứng dụng C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 Các khái niệm - Ngữ cảnh thiết bị…(tt) Thuộc tính Gía trị mặc định Ý nghĩa/Các hàm liên quan Background color White Màu xuất ký tự (SetBkColor) Text color Black Màu ký tự (SetTextColor) Font SYSTEM_FONT Font chữ xuất ký tự (CreateFont, CreateFontIndirect, SelectObject) Pen BLACK_PEN Bút vẽ, sử dụng vẽ đường thẳng, đường cong (CreatePen, CreatePenIndirect, SelectObject) Current Pen Position (0, 0) Tọa độ hành Pen (MoveTo, LineTo) Một số thuộc tính DC quản lý C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 Các khái niệm - Ngữ cảnh thiết bị…(tt) Thuộc tính Gía trị mặc định Ý nghĩa/Các hàm liên quan Brush WHITE_BRUSH Màu tô, sử dụng tơ màu vùng kín (CreateSolidBrush, CreateBrushIndirect, CreatePatternBrush, SelectObject,…) Drawing mode R2_COPYPEN Chế độ vẽ Xác định cách phối hợp bit màu pixel có tọa độ (SetROP2) Bitmap NULL (CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, SelectObject) Một số thuộc tính DC quản lý C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 Các khái niệm - Ngữ cảnh thiết bị…(tt) Thuộc tính Gía trị mặc định Ý nghĩa/Các hàm liên quan Color Palette DEFAULT_PALETTE Bảng màu (CreatePalette, RealizePalette, SelectPalette, UnrealizeObject ) Mapping mode MM_TEXT Xác định đơn vị đo VD - MM_TEXT qui định đơn vị đo theo trục x,y pixel - MM_HIMETRIC qui định đơn vị đo theo trục x,y 0.01 milimet (SetMapMode) ……… Một số thuộc tính DC quản lý C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 10 Các khái niệm - Ngữ cảnh thiết bị…(tt) Các loại DC: Display DC: sử dụng thao tác vẽ lên hình/cửa sổ Printer DC: sử dụng để kết xuất liệu đồ họa máy in Memory DC: tương ứng với thiết bị “logic”, thường dùng để “chuẩn bị” liệu trước hiển thị thiết bị vật lý C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 11 Các khái niệm - Ngữ cảnh thiết bị…(tt) Loại DC Các hàm liên quan Display DC BeginPaint, GetDC, GetDCEx EndPaint, ReleaseDC CreateDC DeleteDC CreateCompatibleDC DeleteDC Printer DC Memory DC Các hàm tạo lập/hủy bỏ DC C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 12 Các khái niệm - DC MFC Các lớp liên quan đến DC CDC: lớp sở dùng để quản lý DC CPaintDC: Dẫn xuất từ lớp CDC, Dùng với thao tác vẽ vùng client cửa sổ Chỉ sử dụng xử lý thông điệp WM_PAINT (hàm CWnd::OnPaint) C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 13 Các khái niệm - DC MFC…(tt) Các lớp liên quan đến DC (tt) CClientDC: Dẫn xuất từ lớp CDC, Dùng với thao tác vẽ vùng client cửa sổ Sử dụng lúc nào, ngoại trừ hàm CWnd::OnPaint CWindowDC: Dẫn xuất từ lớp CDC, Dùng với thao tác vẽ cửa sổ (kể vùng client non-client) C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 14 Các khái niệm - DC MFC…(tt) VD1 Vẽ CDC CDC* pDC = GetDC(); // Các lệnh vẽ … ReleaseDC(pDC); VD2 Xử lý thông điệp WM_PAINT, dùng lớp CDC PAINTSTRUCT ps; CDC* pDC = BeginPaint(&ps); // Các lệnh vẽ … EndPaint(&ps); VD3 Xử lý thông điệp WM_PAINT, dùng lớp CPaintDC CPaintDC dc(this); // Các lệnh vẽ … C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 15 Các khái niệm - DC MFC…(tt) VD4 Vẽ vùng client, dùng lớp CClientDC void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point) { CRect rect; GetClientRect(&rect); CClientDC dc(this); dc.MoveTo(rect.left, rect.top); dc.LineTo(rect.right, rect.bottom); dc.MoveTo(rect.right, rect.top); dc.LineTo(rect.left, rect.bottom); } C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 16 Các khái niệm - DC MFC…(tt) Thuộc tính Gía trị mặc định Ý nghĩa/Các hàm liên quan Background color White CDC::SetBkColor CDC::GetBkColor Text color Black CDC::SetTextColor CDC::GetTextColor Font SYSTEM_FONT CDC::SelectObject Pen BLACK_PEN CDC::SelectObject Current Pen Position (0, 0) CDC::MoveTo CDC::GetCurrentPosition Drawing mode R2_COPYPEN CDC::SetROP2 CDC::GetROP2 Một số thuộc tính lớp CDC quản lý C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 17 Các khái niệm - DC MFC…(tt) Hàm Ý nghĩa MoveTo Di chuyển Pen đến vị trí LineTo Vẽ đoạn thẳng từ vị trí Pen hành đến vị trí Polyline / PolylineTo Vẽ dãy cạnh Arc / ArcTo Vẽ cung PolyBezier / PolyBezierTo Vẽ đường cong Bezier PolyDraw Vẽ đường cong Bezier cạnh nối điểm Một số hàm vẽ lớp CDC cung cấp C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 18 Các khái niệm - Đối tượng vẽ Đối tượng vẽ (Drawing object): đối tượng chi phối thao tác vẽ bạn VD: Đối tượng Pen chi phối thao tác vẽ đường thẳng, đường cong; Đối tượng Brush chi phối thao tác tô màu; Đối tượng Font chi phối thao tác xuất ký tự Đối tượng vẽ chứa thông tin màu sắc (color), kiểu dáng (style) C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 19 Các khái niệm - Đối tượng vẽ…(tt) Các đối tượng vẽ cần phải tạo (Create) hay lấy từ kho (stock) để dùng Nếu tạo mới, sau dùng phải giải phóng Nếu lấy từ kho có sẵn, sau dùng khơng cần giải phóng VD1 Tạo Pen HPEN hPen1 = CreatePen(PS_SOLID, 2, RGB(255, 0, 0); VD2 Lấy Pen từ “kho” có sẵn HPEN hPen2 = (HPEN) GetStockObject(WHITE_PEN); VD3 Xoá đối tượng hPen1 sau sử dụng DeleteObject(hPen1); C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 20 10 In ấn (Printing) - Tổng quan in ấn Windows…(tt) Print job (tác vụ in) Là tài liệu cần in Có thể chứa hay nhiều trang in Print job định nghĩa cặp lệnh StartDoc/EndDoc Cấu trúc liệu dùng cho print job Enhanced Metafile (EMF) EMF: cấu trúc dùng để lưu trữ lệnh vẽ text, vẽ đồ họa,… C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 45 In ấn (Printing) - Tổng quan in ấn Windows…(tt) Banding GDI lưu trữ lệnh vẽ lên máy in file có dạng ~EMF*.TMP (Enhanced Metafile) Khi ứng dụng kết thúc in ấn trang (bằng lệnh EndPage), printer driver chuyển đổi lệnh vẽ metafile thành kết xuất thực máy in cần thiết phải tạo trang đồ họa Kích thước nhớ cho trang đồ họa lớn (VD Máy in 600DPI, giấy letter cần khoảng 4MB) Do đó, printer driver thường sử dụng kỹ thuật “chia band”: chia trang đồ họa thành nhiều vùng hình chữ nhật GDI lấy kích thước band từ printer driver (tùy thuộc máy in) thực lệnh vẽ metafile lên band trang C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 46 23 In ấn (Printing) - Tổng quan in ấn Windows…(tt) Spooling Windows quản lý trình in ấn trình quản lý in (Printer Spooler) Printer spooler tự động nạp Windows khởi động kết thức HĐH shutdown Printer spooler giúp: Xác định trình điều khiển máy in; nạp vào nhớ Lập lịch cho việc in ấn Gởi liệu máy in qua cổng (parallel, serial) Xoá file TMP sau in xong… User tắt chế Spooling máy in (trong Printer properties/Ports) Để in nhanh hơn, GDI khơng lưu liệu cần in lên file mà gởi trực tiếp máy in Hoặc dùng trình điều khiển spooling khác (VD Máy in mạng) C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 47 In ấn (Printing) - Tổng quan in ấn Windows…(tt) C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 48 24 In ấn (Printing) - Tổng quan in ấn Windows…(tt) C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 49 In ấn (Printing) - Tổng quan in ấn Windows…(tt) Printer DC Việc in phải tạo Printer DC Sử dụng Printer DC lệnh GDI giống dùng Window DC User cài đặt nhiều máy in, có máy in mặc định (default) Mỗi máy in có trình điều khiển tương ứng Cần phải xác định tên máy in tạo Printer DC Có cách tạo Printer DC Tạo Printer DC trực tiếp Tạo Printer DC cách dùng hộp thoại chuẩn PrintDlg C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 50 25 In ấn (Printing) - Tổng quan in ấn Windows…(tt) VD1 Tạo Printer DC trực tiếp HDC GetPrinterDC() { DWORD dwNeeded, dwReturned; HDC hdc; PRINTER_INFO_4 * pinfo4; PRINTER_INFO_5 * pinfo5; if (GetVersion() & 0x80000000) // Windows 98 { EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, NULL, 0, &dwNeeded, &dwReturned); pinfo5 = malloc(dwNeeded); EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, (PBYTE)pinfo5,dwNeeded,&dwNeeded,&dwReturned); hdc = CreateDC(NULL, pinfo5->pPrinterName, NULL, NULL); free(pinfo5); } C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 51 In ấn (Printing) - Tổng quan in ấn Windows…(tt) VD1 Tạo Printer DC trực tiếp… (tt) else // Windows NT { EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 4, NULL, 0, &dwNeeded, &dwReturned); pinfo4 = malloc(dwNeeded); EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 4, (PBYTE)pinfo4,dwNeeded,&dwNeeded,&dwReturned); hdc = CreateDC(NULL, pinfo4->pPrinterName, NULL, NULL); free(pinfo4); } return hdc; } C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 52 26 In ấn (Printing) - Tổng quan in ấn Windows…(tt) VD Tạo Printer DC: dùng hộp thoại chuẩn PrintDlg HDC GetPrinterDC() { PRINTDLG pd; HWND hwnd = GetFocus(); // Initialize PRINTDLG ZeroMemory(&pd, sizeof(PRINTDLG)); pd.lStructSize = sizeof(PRINTDLG); pd.hwndOwner = hwnd; pd.hDevMode = NULL; pd.hDevNames = NULL; pd.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC; pd.nCopies = 1; pd.nFromPage = 0xFFFF; pd.nToPage = 0xFFFF; pd.nMinPage = 1; pd.nMaxPage = 0xFFFF; if (PrintDlg(&pd)==TRUE) return pd.hDC } C4W - GDI - Nguyen Tri Tuan - DH.KHTN Tp.HCM Summer 2004 53 In ấn (Printing) - Tổng quan in ấn Windows…(tt) VD Một chương trình in đơn giản dùng API int doPrint() { DOCINFO di={sizeof(DOCINFO), TEXT(“SamplePrinting")}; HDC dcPrint = GetPrinterDC(); if (dcPrint != NULL) { if (StartDoc(dcPrint, &di)

Ngày đăng: 15/12/2013, 16:15

Hình ảnh liên quan

 Các ví dụ vẽ hình đồ họa - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

c.

ví dụ vẽ hình đồ họa Xem tại trang 1 của tài liệu.
Lập trìn hC trên Windows Thư viện đồ họa GDI - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

p.

trìn hC trên Windows Thư viện đồ họa GDI Xem tại trang 1 của tài liệu.
lên màn hình, in ra máy in,…) - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

l.

ên màn hình, in ra máy in,…) Xem tại trang 2 của tài liệu.
Bảng màu - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

Bảng m.

àu Xem tại trang 5 của tài liệu.
Các khái niệm cơ bả n- Ngữ cảnh của thiết bị…(tt) - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

c.

khái niệm cơ bả n- Ngữ cảnh của thiết bị…(tt) Xem tại trang 5 của tài liệu.
VD4. Vẽ 1 đường cong hình sin bằng Polyline #include <math.h>  - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

4..

Vẽ 1 đường cong hình sin bằng Polyline #include <math.h> Xem tại trang 17 của tài liệu.
Các ví dụ vẽ hình đồ họa…(tt) - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

c.

ví dụ vẽ hình đồ họa…(tt) Xem tại trang 17 của tài liệu.
// m_numRects: số hình chữ nhật muốn vẽ - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

m.

_numRects: số hình chữ nhật muốn vẽ Xem tại trang 33 của tài liệu.
Các hình chữ nhật không hiển thị đúng trên nhiều trang in - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

c.

hình chữ nhật không hiển thị đúng trên nhiều trang in Xem tại trang 34 của tài liệu.
Các hình chữ nhật không hiển thị đúng trên nhiều trang in - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

c.

hình chữ nhật không hiển thị đúng trên nhiều trang in Xem tại trang 34 của tài liệu.
Các hình chữ nhật đã hiển thị trên nhiều trang in, nhưng nội dung các trang giống hệt nhau - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

c.

hình chữ nhật đã hiển thị trên nhiều trang in, nhưng nội dung các trang giống hệt nhau Xem tại trang 35 của tài liệu.
Kỹ thuật inc ủa MF C- In trên nhiều trang…(tt) - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

thu.

ật inc ủa MF C- In trên nhiều trang…(tt) Xem tại trang 35 của tài liệu.
Các hình chữ nhật đã hiển thị đúng trên nhiều trang - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

c.

hình chữ nhật đã hiển thị đúng trên nhiều trang Xem tại trang 36 của tài liệu.
Kỹ thuật inc ủa MF C- In trên nhiều trang…(tt) - Tài liệu Lập trình C trên Windows : Thư viện đồ họa GDI docx

thu.

ật inc ủa MF C- In trên nhiều trang…(tt) Xem tại trang 36 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan