Giới thiệu chương trình
Tôi lưu danh sách các kích thước ảnh trong file .config nên bạn có thể dễ dàng thay đổi khi cần thiết (thủ công hoặc thêm chức năng cấu hình). Để sử dụng trước tiên bạn cần chạy file .exe của chương trình để đăng kí menu vào registry. Sau đó bạn có thể bắt đầu chọn các bức ảnh và resize chúng thông qua menu ngữ cảnh.DEMO CHƯƠNG TRÌNH.
Đây là chỉ là phiên bản demo với chức năng và hiệu quả còn hạn chế, tuy nhiên bạn có thể cải tiến để làm chương trình hữu dụng hơn từ source code này.
SOURCE CODE PROJECT
Đăng ký menu ngữ cảnh cho tất cả loại file
Bạn chỉ cần tạo một key con (ví dụContextImageResizer
) trong registry theo đường dẫn bên dưới. Sau đó tạo một key con “command
” chứa lệnh sẽ thực hiện khi menu được kích hoạt.HKEY_CLASSES_ROOT\*\shell
Đoạn code.
private const string MENU_PATH = @"*\shell\ContextImageResizer"; private const string MENU_COMMAND = @"*\shell\ContextImageResizer\command"; public static void AddMenu(string menuCaption, string command) { using (var regMenu = Registry.ClassesRoot.CreateSubKey(MENU_PATH)) { if (regMenu != null) { regMenu.SetValue(string.Empty, menuCaption); } using (var regCommand = Registry.ClassesRoot.CreateSubKey(MENU_COMMAND)) { if (regCommand != null) { regCommand.SetValue(string.Empty, command); } } } }
Resize ảnh với độ phân giải được giữ nguyên
Để làm được điều này bạn cần tính tỉ lệ của kích thước dài, rộng ảnh nguồn và ảnh đích. Ta sẽ lấy tỉ lệ nhỏ hơn để làm tỉ lệ thay đổi kích thước ảnh.private static Bitmap ResizeImage(Image image, int maxWidth, int maxHeight) { int sourceWidth = image.Width; int sourceHeight = image.Height; float ratio = 0; float widthRatio = 0; float heightRatio = 0; widthRatio = ((float)maxWidth / (float)sourceWidth); heightRatio = ((float)maxHeight / (float)sourceHeight); ratio = Math.Min(heightRatio, widthRatio); var destWidth = (int)Math.Ceiling(sourceWidth * ratio); var destHeight = (int)Math.Ceiling(sourceHeight * ratio); var destImage = new Bitmap(destWidth, destHeight); destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); using (Graphics graphics = Graphics.FromImage(destImage)) { graphics.CompositingMode = CompositingMode.SourceCopy; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.DrawImage(image, new Rectangle(0, 0, destWidth, destHeight), new Rectangle(0, 0, sourceWidth, sourceHeight), GraphicsUnit.Pixel); } return destImage; }
Chúc mọi người thành công với tiện ích trên.