Chế độ tô vẽ và vẽ mượt mà (antialiasing)

Các thủ thuật về truyền thông đa phương tiện, đồ họa

Các điều hành viên: tungcan5diop, QUANITGROBEST

Đăng trả lời
neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: Thứ 7 26/05/2007 4:31 pm
Been thanked: 8 times

Chế độ tô vẽ và vẽ mượt mà (antialiasing)

Gửi bài by neverland87 »

Thủ thuật: Chế độ tô vẽ và vẽ mượt mà (antialiasing)
Tác giả: neverland87
Mô tả:
Một yếu tố làm cồng kềnh khả năng của những công cụ vẽ trong các khung lập trình khác (chẳng hạn như Visual Basic) là thiếu quyền điều khiển trên chất lượng vẽ. Tuy nhiên, với GDI+, bạn có thể tăng cường chất lượng tô vẽ sử dụng tự động antialiasing.

Antialiasing kà 1 kỹ thuật dùng làm cho mượt mà những góc cạnh trên các hình dáng và văn
bản. Nó hoạt động bằng cách thêm những bóng tại đường viền ở góc cạnh. Thí dụ, bóng màu xám (grey shading) có thể được thêm vào 1 đường cong màu đen làm cho góc cạnh mượt hơn. Về mặt kỹ thuật, antialiasing trộn lẫn (blend) một đường cong với nền của nó.
Ví dụ,với đoạn mã sau bạn sẽ cho kết quả là hình bên dưới:

Mã: Chọn tất cả

private void Form1_Paint(object sender, PaintEventArgs e)        {            Graphics g = e.Graphics;            Pen myPen = new Pen(Color.Blue, 5);            g.DrawEllipse(myPen, new Rectangle(100, 100, 200, 100));        }
Hình kết quả:
Hình ảnh
Như bạn đã thấy, hình vẽ không được đẹp cho lắm, nó xuất hiện những nét răng cưa trông thật khó ưa

Muốn sử dụng mượt mà trong các ứng dụng, bạn thiết đặt thuộc tính SmoothingMode của đối tượng Graphics. Bạn có thể chọn None, HighSpeed (trị mặc định), AntiAlias và HighQuality
Thuộc tính Graphics.SmoothingMode là 1 trong số ít các thành viên lớp Graphics phải khai báo trạng thái, nghĩa là bạn phải thiết đặt nó trước khi bắt đầu, và nó được áp dụng đối với bất cứ văn bản hoặc hình dáng nào bạn vẽ ra trong phần còn lại của chầu tô vẽ (cho tới khi đối tượng Graphics được giải phóng)
Xem ví dụ sau:

Mã: Chọn tất cả

private void Form1_Paint(object sender, PaintEventArgs e)        {            Graphics g = e.Graphics;            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; //chế độ khử răng cưa            Pen myPen = new Pen(Color.Blue, 5);            g.DrawEllipse(myPen, new Rectangle(100, 100, 200, 100));        }
Sau khi đã bật chế độ khử răng cưa, chúng ta nhận được 1 hình Elip đẹp hơn ban đầu mà bạn đã xem.
Hình ảnh
Antialiasing cũng có thể được dùng đối với những font chữ để cho các góc cạnh trên văn bản mềm dịu hơn. Các phiên bản chót nhất của Windows tự động sử dụng antialiasing đối với những font chữ trên màn hình. Tuy nhiên, bạn có thể đặt để thuộc tính Graphics.TextRenderingHint để bảo đảm văn bản tối ưu. Bạn có thể chọn giữa các mục chọn SingleBitPerPixelGridFit (hiệu năng cao nhất và chất lượng thấp nhất). AntiAliasGridFit (chất lượng cao nhưng hiệu năng thấp) và ClearTypeGridFit (chất lượng tốt nhất trên màn hình LCD). Hoặc bạn có thể dùng trị mặc định SystemDefault để dùng đối với bất cứ đặt để smoothing nào mà người sử dụng cho cấu hình hóa.
Ví dụ:

Mã: Chọn tất cả

private void Form1_Paint(object sender, PaintEventArgs e)        {            Graphics g = e.Graphics;            Font TextFont = new Font("Times New Roman", 25, FontStyle.Italic);            // SingleBitPerPixelGridFit            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;            g.DrawString("Sample Text", TextFont, Brushes.Black, 20, 20);             // AntiliasingGridFit            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;            g.DrawString("Sample Text", TextFont, Brushes.Black, 20, 85);             // ClearTypeGridFit            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;            g.DrawString("Sample Text", TextFont, Brushes.Black, 20, 150);        }
Còn đây là hình kết quả, và hẳn bạn sẽ nhận ra sự khác biệt giữa 3 dòng Sample Text
Hình ảnh
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT
Hình đại diện của thành viên
hdn
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 319
Ngày tham gia: Thứ 4 26/03/2008 7:09 pm
Has thanked: 1 time
Been thanked: 4 times

Re: Chế độ tô vẽ và vẽ mượt mà (antialiasing)

Gửi bài by hdn »

antialiasing còn gọi là khử răng cưa
:|
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

Re: Chế độ tô vẽ và vẽ mượt mà (antialiasing)

Gửi bài by anhtuyenbk »

Hình như dùng cái này thì tốc độ vẽ chậm đi nhiều thì phải :D
Viết thêm bài về DoubleBuffered để mình học hỏi nha :D :D
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
Hình đại diện của thành viên
hdn
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 319
Ngày tham gia: Thứ 4 26/03/2008 7:09 pm
Has thanked: 1 time
Been thanked: 4 times

Re: Chế độ tô vẽ và vẽ mượt mà (antialiasing)

Gửi bài by hdn »

anhtuyenbk đã viết:Hình như dùng cái này thì tốc độ vẽ chậm đi nhiều thì phải :D
bác thử chơi giả lập PS mà bật antialias lên xem, :)) đặc biệt là ps2, có máy p4 nào chịu nổi đâu :))
:|
thuyan1990
Thành viên trung thành
Thành viên trung thành
Bài viết: 299
Ngày tham gia: Thứ 7 02/01/2010 10:23 am
Has thanked: 20 times
Been thanked: 2 times

Re: Chế độ tô vẽ và vẽ mượt mà (antialiasing)

Gửi bài by thuyan1990 »

Theo em biết thì pen là bút vẽ còn brush là Cọ vẽ dành cho Graphics vậy anh cho em hỏi mình có thể vẽ 1 chữ với từng pixel được không anh?? và nếu mình muốn canh lề thì sao anh neverland87
em có dùng cách này
  1. Dim canhle As StringFormat = StringFormat.GenericDefault
  2. canhle .Alignment = StringAlignment.Center
  3.             canhle .LineAlignment = StringAlignment.Center

nhưng kết quả không như mong muốn
Đăng trả lời

Quay về