2012-06-21 2 views
5

का उपयोग कर छवि का आकार बदलना डिजिटल कैमरों से ताजा छवियां अक्सर 2-3 एमबी के आकार से ऊपर होती हैं जिससे ईमेल और अन्य तरीकों से इसे स्थानांतरित करना मुश्किल हो जाता है। इस छवि को आकार बदलने की आवश्यकता है (फ़ाइल आकार के मामले में और ऊंचाई या चौड़ाई नहीं)। एमएस पेंट की छवि छवि आकार बदलने की कार्यक्षमता के समान ही। मैं छवि फ़ाइल सिद्धांतों पर अच्छी तरह से शिक्षित नहीं हूं।सी #

  • छवि सिद्धांत (कैसे विभिन्न छवि प्रारूप काम jpeg, png, टिफ आदि): अगर किसी को जानकारी स्रोतों निम्नलिखित की ओर इंगित कर सकते हैं मुझे मैं सराहना करेंगे।?

  • आकार बदलने पर छवि इसकी तीखेपन को कैसे खो देती है? क्या

  • क्या कोई मुफ्त .Net (मैं 4.0 का उपयोग कर रहा हूं) पुस्तकालय ऐसा करने के लिए उपलब्ध हैं? यदि मैं com interoperabilty का उपयोग कर किसी भी लाइब्रेरी का उपयोग नहीं कर सकता?

बहुत धन्यवाद,

+0

"रंग परिमाणीकरण" http://en.wikipedia.org/wiki/Color_quantization – BryanJ

+0

बिटमैप (छवि, चौड़ाई, ऊंचाई) निर्माता के बारे में पढ़ें बिना किसी झगड़े के एक सुंदर विश्वसनीय काम करता है। –

+0

हालांकि, लुसी गुणवत्ता। –

उत्तर

24

छवि का आकार बदलने कार्यक्षमता सही नेट ढांचे में बनाया गया है है।

  • GDI +
  • WIC
  • WPF

यहाँ एक अच्छा blog post उनके बीच के मतभेदों को कवर है: वहाँ विभिन्न दृष्टिकोणों के एक जोड़े हैं।

public void Resize(string imageFile, string outputFile, double scaleFactor) 
{ 
    using (var srcImage = Image.FromFile(imageFile)) 
    { 
     var newWidth = (int)(srcImage.Width * scaleFactor); 
     var newHeight = (int)(srcImage.Height * scaleFactor); 
     using (var newImage = new Bitmap(newWidth, newHeight)) 
     using (var graphics = Graphics.FromImage(newImage)) 
     { 
      graphics.SmoothingMode = SmoothingMode.AntiAlias; 
      graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 
      graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight)); 
      newImage.Save(outputFile); 
     } 
    } 
} 
+0

धन्यवाद डारिन। मैं संख्याओं में चौड़ाई और ऊंचाई का उल्लेख नहीं करना चाहता हूं। इसके बजाय वे प्रतिशत में उल्लेख किया जाएगा। इसका उपयोग करने के लिए मुझे मौजूदा छवियों की ऊंचाई चौड़ाई की गणना करना होगा (संभवतः)। – James

+0

हां, आप 'srcImage' लोड करने के बाद ऐसा कर सकते हैं। पहले और दूसरे 'उपयोग' कथन के बीच। आप cuold का उपयोग करते हैं srcImage.Width और srcImage.Height की गणना करने के लिए नई विड्थ और नई हाइट बिटमैप कन्स्ट्रक्टर को पास की गई। –

+0

मैंने अपनी पोस्ट को एक उदाहरण के साथ अपडेट किया है। –

7

मैं डैरिन दिमित्रोव द्वारा प्रदान उदाहरण के लिए इस्तेमाल किया, छवि को बढ़ा-चढ़ा कर और डिस्क स्थान (1.5MB से 17MB करने के लिए या तो) का एक बहुत ऊपर ले लिया गया था।

यह कोड की अंतिम पंक्ति में एक छोटी गलती के कारण है।

नीचे दिया गया फ़ंक्शन छवि को बिटमैप (विशाल छवि आकार) के रूप में सहेज लेगा।

newImage.Save(outputFile) 

सही समारोह होना चाहिए:

newImage.Save(outputFile, ImageFormat.Jpeg);