Đồ hoạ, đa phương tiện ( Mutilmedia) và In ấn Đồ họa phần 1

Chia sẻ: Nghia Bui Tuan | Ngày: | Loại File: PDF | Số trang:7

0
155
lượt xem
54
download

Đồ hoạ, đa phương tiện ( Mutilmedia) và In ấn Đồ họa phần 1

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Đồ hoạ, đa phương tiện ( Mutilmedia) và In ấn Đồ họa, video, audio, và in ấn là những dấu hiệu tiêu chuẩn của một client đa năng truyền thống trên hệ điều hành Microsoft Windows.

Chủ đề:
Lưu

Nội dung Text: Đồ hoạ, đa phương tiện ( Mutilmedia) và In ấn Đồ họa phần 1

  1. Chương 8 : Đồ hoạ, đa phương tiện ( Mutilmedia) và In ấn Đồ họa, video, audio, và in ấn là những dấu hiệu tiêu chuẩn của một client đa năng truyền thống trên hệ điều hành Microsoft Windows. Khi tiến đến đa phương tiện, Microsoft .NET Framework hỗ trợ cho vài đặc tính này, trong khi bỏ qua các đặc tính khác. Ví dụ, bạn sẽ tìm thấy một tập phức tạp các công cụ dùng để thực hiện việc vẽ trong không gian hai chiều và việc in dựa-trên-sự-kiện với GDI+ và các kiểu thuộc không gian tên System.Drawing. Các lớp này hỗ trợ các hàm Graphics Device Interface (GDI) nguyên sinh trong Windows API; khiến cho việc vẽ các hình dạng phức tạp, làm việc với tọa độ và phép biến hình, và xử lý ảnh dễ dàng hơn. Mặt khác, nếu bạn muốn chơi một file audio, hiển thị một file video, hoặc lấy thông tin về các tác vụ in hiện thời, bạn sẽ cần phải vượt ra ngoài .NET Framework. Các đề mục trong chương này trình bày cách sử dụng các đặc tính nội tại .NET và các thư viện Win32 nguyên sinh thông qua P/Invoke hoặc COM Interop. Một vài kỹ thuật sẽ được đề cập: Tìm và sử dụng các font đã được cài đặt (mục 8.1), vẽ hình cuộn được (mục 8.5) và thumbnail (mục 8.8), cũng như thực hiện chụp màn hình bằng Win32 API (mục 8.6). Làm việc với các điều kiểm tùy biến owner-drawn (mục 8.3 và 8.4) và xử lý các đối tượng đồ họa trên màn hình (mục 8.2 và 8.7). Chơi các file audio và video (bao gồm WAV, MP3, và MPEG) bằng thư viện Quartz có trong Windows Media Player (mục 8.9, 8.10, và 8.11). In các văn bản đơn giản và phức tạp (mục 8.13 và 8.14), in text với wrapping (mục 8.15), tạo print preview (mục 8.16), và lấy thông tin về máy in (mục 8.12) và hàng đợi in bằng WMI (mục 8.17). 1.1 Tìm tất cả các font đã được cài đặt Bạn cần lấy danh sách tất cả các font đã được cài đặt trên máy tính hiện hành. Tạo đối tượng System.Drawing.Text.InstalledFontCollection, tập hợp này chứa các đối tượng FontFamily mô tả tất cả các font đã được cài đặt. Lớp InstalledFontCollection cho phép bạn lấy thông tin về các font đã được cài đặt. Đoạn mã dưới đây duyệt qua tập hợp font vừa được tạo; mỗi khi tìm thấy một font, nó sẽ tạo một Label mới để hiển thị tên font với diện mạo cho trước (kích thước 14 point). Label được thêm vào một Panel cuộn được, cho phép người dùng cuộn qua danh sách các font hiện có. using System; using System.Windows.Forms;
  2. using System.Drawing; using System.Drawing.Text; public class ListFonts : System.Windows.Forms.Form { private System.Windows.Forms.Panel pnlFonts; // (Bỏ qua phần mã designer.) private void ListFonts_Load(object sender, System.EventArgs e) { // Tạo tập hợp font. InstalledFontCollection fontFamilies = new InstalledFontCollection(); // Duyệt qua tất cả các font. int offset = 10; foreach (FontFamily family in fontFamilies.Families) { try { // Tạo một Label để hiển thị text (viết ở font này). Label fontLabel = new Label(); fontLabel.Text = family.Name; fontLabel.Font = new Font(family, 14); fontLabel.Left = 10; fontLabel.Width = pnlFonts.Width; fontLabel.Top = offset; // Thêm Label vào Panel cuộn được. pnlFonts.Controls.Add(fontLabel); offset += 30; }catch { // Lỗi sẽ xảy ra nếu font được chọn không // hỗ trợ normal style (mặc định được sử dụng khi // tạo đối tượng Font). Vấn đề này có thể // được bỏ qua mà không sao cả.
  3. } } } } The image part with relationship ID rId5 was not found in the file. Hình 8.1 Danh sách các font đã được cài đặt 1.2 Thực hiện “hit testing” với shape Bạn cần nhận biết người dùng có nhắp vào trong một shape hay không. Kiểm tra điểm mà người dùng đã nhắp vào bằng các phương thức như Rectangle.Contains và Region.IsVisible (thuộc không gian tên System.Drawing), hoặc GraphicsPath.IsVisible (thuộc không gian tên System.Drawing.Drawing2D), tùy vào kiểu của shape. Thông thường, nếu sử dụng GDI+ để vẽ shape trên form, có thể bạn sẽ cần xác định xem khi nào người dùng nhắp vào trong một shape cho trước. .NET Framework cung cấp ba phương thức có thể thực hiện công việc này: • Phương thức Rectangle.Contains—nhận vào một điểm và trả về true nếu điểm này nằm bên trong hình chữ nhật cho trước. Trong nhiều trường hợp, bạn có thể lấy được hình chữ nhật đối với một kiểu shape khác. Ví dụ, bạn có thể sử dụng Image.GetBounds để lấy hình chữ nhật mô tả đường biên của shape. Cấu trúc Rectangle là thành viên của không gian tên System.Drawing. • Phương thức GraphicsPath.IsVisible—nhận vào một điểm và trả về true nếu điểm này nằm bên trong một vùng được định nghĩa bởi GraphicsPath khép kín. Vì một GraphicsPath có thể chứa nhiều line, shape, và figure nên cách này rất hữu ích nếu bạn muốn kiểm tra một điểm có nằm bên trong một vùng không phải hình chữ nhật hay không. Lớp GraphicsPath là một thành viên của không gian tên System.Drawing.Drawing2D.
  4. • Phương thức Region.IsVisible—nhận vào một điểm và trả về true nếu điểm này nằm bên trong một vùng được định nghĩa bởi Region. Cũng giống như GraphicsPath, Region có thể mô tả một shape không phải hình chữ nhật. Region là một thành viên của không gian tên System.Drawing. Ví dụ sau đây sẽ tạo một Rectangle và một GraphicsPath. Theo mặc định, hai shape này có nền màu xanh nhạt. Tuy nhiên, phương thức thụ lý sự kiện Form.MouseMove sẽ kiểm tra xem con trỏ chuột có nằm trong một trong hai shape này hay không, và cập nhật màu nền thành hồng tươi nếu con trỏ ở đó. using System; using System.Windows.Forms; using System.Drawing; using System.Drawing.Drawing2D; public class HitTesting : System.Windows.Forms.Form { // (Bỏ qua phần mã designer.) // Định nghĩa các shape sẽ được sử dụng. private GraphicsPath path; private Rectangle rectangle; // Định nghĩa các cờ để theo vết con trỏ chuột. private bool inPath = false; private bool inRectangle = false; // Định nghĩa các bút vẽ. Brush highlightBrush = Brushes.HotPink; Brush defaultBrush = Brushes.LightBlue; private void HitTesting_Load(object sender, System.EventArgs e) { // Tạo các shape. path = new GraphicsPath(); path.AddEllipse(10, 10, 100, 60); path.AddCurve(new Point[] {new Point(50, 50), new Point(10,33), new Point(80,43)}); path.AddLine(50, 120, 250, 80); path.AddLine(120, 40, 110, 50); path.CloseFigure();
  5. rectangle = new Rectangle(100, 170, 220, 120); } private void HitTesting_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; // Vẽ shape dựa trên phần chọn hiện tại. if (inPath) { g.FillPath(highlightBrush, path); g.FillRectangle(defaultBrush, rectangle); }else if (inRectangle) { g.FillRectangle(highlightBrush, rectangle); g.FillPath(defaultBrush, path); }else { g.FillPath(defaultBrush, path); g.FillRectangle(defaultBrush, rectangle); } g.DrawPath(Pens.Black, path); g.DrawRectangle(Pens.Black, rectangle); } private void HitTesting_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { Graphics g = this.CreateGraphics(); // Thực hiện "hit testing" với hình chữ nhật. if (rectangle.Contains(e.X, e.Y)) { if (!inRectangle) {
  6. inRectangle = true; // Đổi màu nền hình chữ nhật. g.FillRectangle(highlightBrush, rectangle); g.DrawRectangle(Pens.Black, rectangle); } }else if (inRectangle) { inRectangle = false; // Phục hồi hình chữ nhật. g.FillRectangle(defaultBrush, rectangle); g.DrawRectangle(Pens.Black, rectangle); } // Thực hiện "hit testing" với path. if (path.IsVisible(e.X, e.Y)) { if (!inPath) { inPath = true; // Đổi màu nền path. g.FillPath(highlightBrush, path); g.DrawPath(Pens.Black, path); } }else if (inPath) { inPath = false; // Phục hồi path. g.FillPath(defaultBrush, path); g.DrawPath(Pens.Black, path); } g.Dispose(); }
  7. }
Đồng bộ tài khoản