Đoạn snippet dưới đây cho phép thay đổi kích thước của 1 bức ảnh. Kích thước mới do người dùng tùy chọn nhập vào.
public Image resizeImage(Image img, int width, int height)
{
Bitmap b = new Bitmap( width, height ) ;
Graphics g = Graphics.FromImage( (Image ) b ) ;
g.DrawImage( img, 0, 0, width, height ) ;
g.Dispose() ;
return (Image ) b ;
}
Hoặc đơn giản chỉ cần nhập vào tỷ lệ phần trăm kích thước của ảnh mới so với ảnh ban đầu cần thay đổi. Để ảnh còn lại 70% thì ta cần nhập vào con số 0.7F
public Image Resize(Image img, float percentage)
{
//lấy kích thước ban đầu của bức ảnh
int originalW = img.Width;
int originalH = img.Height;
//tính kích thước cho ảnh mới theo tỷ lệ đưa vào
int resizedW = (int)(originalW * percentage);
int resizedH = (int)(originalH * percentage);
//tạo 1 ảnh Bitmap mới theo kích thước trên
Bitmap bmp = new Bitmap(resizedW, resizedH);
//tạo 1 graphic mới từ Bitmap
Graphics graphic = Graphics.FromImage((Image)bmp);
//vẽ lại ảnh ban đầu lên bmp theo kích thước mới
graphic.DrawImage(img, 0, 0, resizedW, resizedH);
//giải phóng tài nguyên mà graphic đang giữ
graphic.Dispose();
//return the image
return (Image)bmp;
}
Ví dụ: Muốn giảm 1 nửa kích thước của ảnh "abc.jpg" ta làm như sau:
var ifirst = Image.FromFile("abc.jpg");
var iresize = Resize(ifirst, 0.5F);
iresize.Save("a.jpg");
Để tùy biến chất lượng ảnh, lớp đồ họa Graphics có chứa 1 số các mode InterpolationMode enum. Các mode này sử dụng để chỉ ra thuật toán nào được sử dụng.
Các thuật toán (được xây dựng trong .NET):
- Bicubic
- Bilinear
- Default
- High
- HighQualityBicubic
- HighQualityBilinear
- Invalid
- Low
- NearestNeighbor
Theo ví dụ 1 ở trên ta chỉnh sửa lại như sau để chỉ ra thuật toán nào nên được sử dụng:
public Image resizeImage( Image img, int width, int height )
{
Bitmap b = new Bitmap( width, height ) ;
Graphics g = Graphics.FromImage( (Image ) b ) ;
g.InterpolationMode = InterpolationMode.Bicubic ; // Specify here
g.DrawImage( img, 0, 0, width, height ) ;
g.Dispose() ;
return (Image ) b ;
}