2010-05-12 14 views
11

किसी भी तृतीय पक्ष पुस्तकालयों (केवल नेट फ्रेमवर्क) का उपयोग किए बिना सी # में सफेद पृष्ठभूमि के साथ वर्ग, सफेद पृष्ठभूमि के साथ पैडिंग को आकार देने के लिए कैसे करें?स्क्वायर छवि बनाएं

धन्यवाद!

+1

आप एक सफेद कैनवास के साथ एक वर्ग में नव resampled छवि फिट ऐसी है कि छवि अपने पहलू अनुपात को बरकरार रखे हुए है, या खिंचाव यह वर्ग (अनावश्यक की सफेद कैनवास तरह बनाने) फिट करने के लिए करना चाहते हैं? – JYelton

+0

मैं पहलू अनुपात को बनाए रखना चाहता हूं - –

+0

@ माइकल डी। कोई असंगत नहीं है? स्क्वायरिंग पहलू अनुपात में परिवर्तन करता है। या छवि स्वीकार्य क्लिपिंग है? – kenny

उत्तर

21

यह वास्तव में बहुत आसानी से किया जा सकता है।

public static Image PadImage(Image originalImage) 
{ 
    int largestDimension = Math.Max(originalImage.Height, originalImage.Width); 
    Size squareSize = new Size(largestDimension, largestDimension); 
    Bitmap squareImage = new Bitmap(squareSize.Width, squareSize.Height); 
    using (Graphics graphics = Graphics.FromImage(squareImage)) 
    { 
     graphics.FillRectangle(Brushes.White, 0, 0, squareSize.Width, squareSize.Height); 
     graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
     graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
     graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 

     graphics.DrawImage(originalImage, (squareSize.Width/2) - (originalImage.Width/2), (squareSize.Height/2) - (originalImage.Height/2), originalImage.Width, originalImage.Height); 
    } 
    return squareImage; 
} 
+0

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन यह अभी भी उपयोगी है। मैंने वास्तव में गणित का उपयोग किया। मेरी छवियों को थंबनेल प्राप्त करने के लिए फसल करें। अच्छी तरह से काम! – AntLaC

2

इस विधि का उपयोग करने का प्रयास करें। आखिरी तर्क यह है कि आप छवि को फिट करने के लिए खिंचाव करना चाहते हैं या नहीं। यदि गलत है, तो छवि नए सफेद कैनवास के अंदर केंद्रित है। आप आवश्यकतानुसार एक वर्ग या गैर-वर्ग आकार को पारित कर सकते हैं।

public static Bitmap ResizeBitmapOnWhiteCanvas(Bitmap bmpOriginal, Size szTarget, bool Stretch) 
    { 
     Bitmap result = new Bitmap(szTarget.Width, szTarget.Height); 
     using (Graphics g = Graphics.FromImage((Image)result)) 
     { 
      g.InterpolationMode = InterpolationMode.NearestNeighbor; 
      g.FillRectangle(Brushes.White, new Rectangle(0, 0, szTarget.Width, szTarget.Height)); 
      if (Stretch) 
      { 
       g.DrawImage(bmpOriginal, 0, 0, szTarget.Width, szTarget.Height); // fills the square (stretch) 
      } 
      else 
      { 
       float OriginalAR = bmpOriginal.Width/bmpOriginal.Height; 
       float TargetAR = szTarget.Width/szTarget.Height; 
       if (OriginalAR >= TargetAR) 
       { 
        // Original is wider than target 
        float X = 0F; 
        float Y = ((float)szTarget.Height/2F) - ((float)szTarget.Width/(float)bmpOriginal.Width * (float)bmpOriginal.Height)/2F; 
        float Width = szTarget.Width; 
        float Height = (float)szTarget.Width/(float)bmpOriginal.Width * (float)bmpOriginal.Height; 
        g.DrawImage(bmpOriginal, X, Y, Width, Height); 
       } 
       else 
       { 
        // Original is narrower than target 
        float X = ((float)szTarget.Width/2F) - ((float)szTarget.Height/(float)bmpOriginal.Height * (float)bmpOriginal.Width)/2F; 
        float Y = 0F; 
        float Width = (float)szTarget.Height/(float)bmpOriginal.Height * (float)bmpOriginal.Width; 
        float Height = szTarget.Height; 
        g.DrawImage(bmpOriginal, X, Y, Width, Height); 
       } 
      } 
     } 
     return result; 
    } 
1

आप यह नहीं कहते कि आप इसे कैसे गद्दी चाहते हैं। मान लिया जाये कि आप चाहते हैं छवि केन्द्रित, newFileName में imageFileName में छवि फ़ाइल नाम और वांछित आउटपुट फ़ाइल नाम के साथ:

 Bitmap orig = new Bitmap(imageFileName); 
     int dim = Math.Max(orig.Width, orig.Height); 
     Bitmap dest; 
     using (Graphics origG = Graphics.FromImage(orig)) 
     { 
      dest = new Bitmap(dim, dim, origG); 
     } 
     using (Graphics g = Graphics.FromImage(dest)) 
     { 
      Pen white = new Pen(Color.White, 22); 
      g.FillRectangle(new SolidBrush(Color.White), 0, 0, dim, dim); 
      g.DrawImage(orig, new Point((dim - orig.Width)/2, (dim - orig.Height)/2)); 
     } 
     dest.Save(newFileName); 
संबंधित मुद्दे