NHẬN ĐẶT QUẢNG CÁO TẠI ĐÂY

[CSHARP] Resize images via context menu

Hiện nay việc chụp ảnh trở nên rất dễ dàng và thuận tiện. Điều này khiến ổ cứng của tôi bị ngốn khá nhiều dung lượng. Chính vì vậy tôi tạo một tool đơn giản để resize ảnh hàng loạt (để giảm dung lượng) từ menu ngữ cảnh với hi vọng có thêm dung lượng để nhét được nhiều ảnh mới sau này.

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.

PASSWORD UNZIP: HUNG.PRO.VN
Chúc Mọi Người Thành Công Với Thủ Thuật Trên.
Nếu mọi người có vướng mắc gì mình chia sẽ trên trang có thể gửi liên hê cho mình tại đây nhé.
Cảm ơn mọi người đã quan tâm.

NHẬN ĐẶT QUẢNG CÁO TẠI ĐÂY