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 ; }
0 comments:
Đăng nhận xét