2013-08-06 49 views
5

Tôi có một hình ảnh lớn với chất lượng tốt (cho nhu cầu của tôi), tôi cần thay đổi kích thước thành kích thước nhỏ (30 x 30px), tôi thay đổi kích thước bằng graphic.DrawImage. Nhưng khi tôi thay đổi kích thước nó trở nên mờ nhạt và nhẹ hơn. cũng tôi đã thử CompositingQuality và InterpolationMode, nhưng tất cả đều xấu.Cách thay đổi kích cỡ hình ảnh mà không làm mất chất lượng

Ví dụ, chất lượng đó tôi đang cố gắng.

kết quả của tôi

Sửa Ảnh của biểu tượng tôi vẽ bản thân mình, có thể nó sẽ được tốt hơn vẽ nó nhỏ mà không thay đổi kích thước?

Edit2

đang Resizeing:

   Bitmap tbmp; 
       //drawing all my features in tbmp with graphics 
       bmp = new Bitmap(width + 5, height + 5); 
       bmp.MakeTransparent(Color.Black); 
       using (var gg = Graphics.FromImage(bmp)) 
       { 
        gg.CompositingQuality = CompositingQuality.HighQuality; 
        // gg.SmoothingMode = SmoothingMode.HighQuality; 
        gg.InterpolationMode = InterpolationMode.HighQualityBicubic; 

        gg.DrawImage(tbmp, new Rectangle(0, 0, width, height), new Rectangle(GXMin, GYMin, GXMax + 20, GYMax + 20), GraphicsUnit.Pixel); 
        gg.Dispose(); 
       } 
+4

Hình ảnh tỷ lệ, không làm mất chất lượng = Đồ họa vector, chứ không phải bitmap. –

+0

Bạn có thể cho chúng tôi thấy * mã thực tế * mà bạn đang sử dụng để thực hiện thay đổi kích thước không? –

+0

Đã thêm mã thực tế – BOBUK

Trả lời

6

tôi sử dụng phương pháp này như là một cách để có được một hình ảnh thu nhỏ (kích thước bất kỳ) từ một bản gốc (của bất kỳ kích thước). Lưu ý rằng có các vấn đề cố hữu khi bạn yêu cầu tỷ lệ kích thước thay đổi rất lớn so với tỷ lệ gốc. Tốt nhất để yêu cầu các kích thước có tỷ lệ với nhau:

public static Image GetThumbnailImage(Image OriginalImage, Size ThumbSize) 
{ 
    Int32 thWidth = ThumbSize.Width; 
    Int32 thHeight = ThumbSize.Height; 
    Image i = OriginalImage; 
    Int32 w = i.Width; 
    Int32 h = i.Height; 
    Int32 th = thWidth; 
    Int32 tw = thWidth; 
    if (h > w) 
    { 
     Double ratio = (Double)w/(Double)h; 
     th = thHeight < h ? thHeight : h; 
     tw = thWidth < w ? (Int32)(ratio * thWidth) : w; 
    } 
    else 
    { 
     Double ratio = (Double)h/(Double)w; 
     th = thHeight < h ? (Int32)(ratio * thHeight) : h; 
     tw = thWidth < w ? thWidth : w; 
    } 
    Bitmap target = new Bitmap(tw, th); 
    Graphics g = Graphics.FromImage(target); 
    g.SmoothingMode = SmoothingMode.HighQuality; 
    g.CompositingQuality = CompositingQuality.HighQuality; 
    g.InterpolationMode = InterpolationMode.High; 
    Rectangle rect = new Rectangle(0, 0, tw, th); 
    g.DrawImage(i, rect, 0, 0, w, h, GraphicsUnit.Pixel); 
    return (Image)target; 
} 
+0

Xin chào, tính năng này có hoạt động để mở rộng quy mô không? –

+0

@ObiOnuorah Không có gì hoạt động tốt để mở rộng quy mô vượt ra ngoài kích thước hình ảnh gốc ... không có thông tin hình ảnh có sẵn. – DonBoitnott

Các vấn đề liên quan