2013-08-06 21 views
5

Ho una grande immagine di buona qualità (per i miei bisogni), ho bisogno di ridimensionare a piccole dimensioni (30 x 30px), la ridimensiono con graphic.DrawImage. Ma quando lo ridimensiono diventa sfocato e poco più leggero. anche io ho provato CompositingQuality e InterpolationMode, ma tutto è andato male.Come ridimensionare l'immagine senza perdere la qualità

Esempio, quella qualità che sto cercando di ottenere.

Il mio risultato

Redatta Immagine dell'icona disegnare i me stesso, forse sarà meglio disegnare piccola senza ridimensionamento?

Edit2

codice 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

Ridimensionare l'immagine, non perdere la qualità = Grafica vettoriale, non bitmap. –

+0

Puoi mostrarci il * codice reale * che stai utilizzando per eseguire il ridimensionamento? –

+0

Aggiunto codice attuale – BOBUK

risposta

6

Io uso questo metodo come un modo per ottenere un'immagine in miniatura (di qualsiasi dimensione) da un originale (di qualsiasi dimensione). Nota che ci sono problemi inerenti quando chiedi una proporzione che varia molto da quella dell'originale. Meglio chiedere dimensioni che siano in scala l'una con l'altra:

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

Salve, funziona anche per il ridimensionamento? –

+0

@ObiOnuorah Niente funziona bene per scalare verso l'alto oltre la dimensione dell'immagine originale ... non ci sono solo informazioni sull'immagine disponibili. – DonBoitnott

Problemi correlati