2013-08-06 10 views
5

मेरे पास अच्छी गुणवत्ता (मेरी ज़रूरतों के लिए) में एक बड़ी छवि है, मुझे छोटे आकार (30 x 30px) में आकार बदलने की आवश्यकता है, मैं ग्राफिक के साथ इसका आकार बदलता हूं। ड्राइमेज। लेकिन जब मैं आकार बदलता हूं तो यह धुंधला और थोड़ा हल्का हो जाता है। भी मैंने कंपोजिटिंग गुणवत्ता और इंटरपोलेशन मोड का प्रयास किया है, लेकिन यह सब खराब था।गुणवत्ता खोने के बिना छवि का आकार कैसे बदलें

उदाहरण, वह गुणवत्ता जो मैं प्राप्त कर रहा हूं।

मेरे परिणाम

संपादित आइकन मैं अपने आप आकर्षित की छवि, शायद यह बेहतर होगा आकार बदलने के बिना यह छोटे आकर्षित?

EDIT2

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

स्केल छवि, गुणवत्ता खोने नहीं = वेक्टर ग्राफिक्स, बिटमैप्स नहीं। –

+0

क्या आप हमें * वास्तविक कोड * दिखा सकते हैं जिसका उपयोग आप आकार बदलने के लिए कर रहे हैं? –

+0

जोड़ा गया वास्तविक कोड – BOBUK

उत्तर

6

मैं एक तरह से एक मूल (किसी भी आकार के) से (किसी भी आकार के) एक झलक छवि प्राप्त करने के लिए के रूप में इस विधि का उपयोग। ध्यान दें कि जब आप आकार अनुपात के लिए पूछते हैं तो निहित समस्याएं होती हैं जो मूल से बहुत भिन्न होती हैं। एक दूसरे के पैमाने पर आकार के लिए पूछने के लिए सर्वश्रेष्ठ:

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

हाय, क्या यह स्केलिंग के लिए भी काम करता है? –

+0

@ObiOnuorah मूल छवि आकार से ऊपर की ओर स्केल करने के लिए कुछ भी अच्छा काम नहीं करता है ... वहां छवि जानकारी उपलब्ध नहीं है। – DonBoitnott

संबंधित मुद्दे