CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 309

309

Chương 8: Đồ họa, đa phương tiện, và in ấn

Lớp

Image

cung cấp chức năng tạo thumbnail thông qua phương thức

GetThumbnailImage

. Bạn

chỉ cần truyền chiều rộng và chiều cao của hình thumbnail bạn muốn (tính bằng pixel), và lớp

Image

sẽ tạo một đối tượng

Image

mới phù hợp với tiêu chuẩn này. Việc khử méo dạng răng

cưa (antialiasing) được sử dụng khi thu nhỏ bức hình để bảo đảm chất lượng bức hình tốt nhất
có thể được, mặc dù một số vết mờ và thiếu hụt một vài tiểu tiết là không thể tránh khỏi (khử
méo dạng răng cưa là quá trình loại bỏ các rìa lởm chởm, thường có trong các bức hình đã
được thay đổi kích thước, bằng cách tô bóng với một màu trung gian). Ngoài ra, bạn có thể
cung cấp một callback để tạo thumbnail một cách bất đồng bộ.
Khi tạo một thumbnail, việc quan trọng là phải bảo đảm tỉ số giữa hai chiều vẫn như cũ (hằng
số). Ví dụ, nếu bạn thu nhỏ một bức hình kích thước 200x100 thành một thumbnail kích thước
50x50, chiều rộng sẽ bị nén còn một phần tư và chiều cao bị nén còn một nửa, điều này làm
méo bức hình. Để bảo đảm tỉ lệ này vẫn như cũ, bạn có thể thay đổi chiều rộng hoặc chiều cao
thành một kích thước cố định rồi điều chỉnh chiều còn lại cho cân xứng.
Ví dụ dưới đây đọc một file bitmap và tạo một thumbnail kích thước không lớn hơn 50x50
(vẫn bảo toàn tỉ lệ gốc):

using System;

using System.Drawing;

using System.Windows.Forms;

public class Thumbnails : System.Windows.Forms.Form {

// (Bỏ qua phần mã designer.)

Image thumbnail;

private void Thumbnails_Load(object sender, System.EventArgs e) {

Image img = Image.FromFile("test.jpg");

int thumbnailWidth = 0, thumbnailHeight = 0;

// Điều chỉnh chiều lớn hơn là 50 pixel.

// Việc này bảo đảm thumbnail sẽ không lớn hơn 50x50 pixel.

// Nếu muốn hiển thị nhiều thumbnail, bạn sẽ phải dùng

// một hình vuông 50x50 pixel cho mỗi thumbnail.

if (img.Width > img.Height) {

thumbnailWidth = 50;

thumbnailHeight = Convert.ToInt32(((50F / img.Width) *

img.Height));

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.