2010-05-15 7 views
8

मैं बिटमैप से एक आकार की छवि बनाने की कोशिश कर रहा हूं, एक नई ऊंचाई/चौड़ाई और एक नया संकल्प सेट करता हूं और इसे पीएनजी में सहेजता हूं। मैं बी को पास करने की एक बिटमैप बनाने के लिए या तो सीधे ए) Image.FromFile(filename) या बी से) New Bitmap(imageSource) ऐसा कर सकते हैं। दोनों काम ठीक schmokay, लेकिन एक और बी मुझे मूल्यों preseve की अनुमति नहीं है (लेकिन यह मुझे useIcm=True साथ मूल्यों की रक्षा करने की अनुमति देता है) मुझे रचना पर एक नया चौड़ाई/ऊंचाई निर्धारित करने की अनुमति नहीं देता है।सिस्टम से नया बिटमैप बनाते समय बिटमैप मानों को संरक्षित करना। ड्रॉइंग.इमेज

ठीक है, अब इस पर कुछ कोड और उदाहरण के लिए:

  1. Dim sourceBitmap As New Bitmap(imagePath & myImage1Name) < -not अच्छा बिल्कुल (# 1 अधिभार)। पर .Save

  2. Dim sourceBitmap2 As Bitmap = Image.FromFile(imagePath & myImage1Name, True) < -not अच्छा (# 5 अधिभार) HorizontalResolution या PixelFormat तरह चीजों की रक्षा नहीं करता है। यह HorizontalResolution या PixelFormat.Save पर तरह बातें की रक्षा करता है, लेकिन यह मुझे एक नया आकार में छवि को प्रारंभ करने की अनुमति नहीं करता है।

  3. Dim targetBitmap As New Bitmap(sourceBitmap2, newWidth, newHeight) <-अच्छा नहीं। हालांकि sourceBitmap2 (देखें # 2 ऊपर) useIcm=True साथ प्रारंभ किया गया था, यह कोई फर्क नहीं पड़ता एक बार मैं इसे targetBitmap में स्रोत के रूप में में उत्तीर्ण कर ली है।

असल में, मैं सेट एक तरह से दोनों useIcm=Trueऔर की तरह कुछ के साथ एक नया बिटमैप contruct तलाश कर रहा हूँ एक ही समय में चौड़ाई/ऊंचाई (Width/Height रीड-ओनली होते गुण एक बार यह बनाया गया है) ।

मैं Graphics.DrawImage मार्ग भी नीचे चला गया है और यह वही है - Graphics.FromImage(sourceBitmap) मानों को संरक्षित नहीं करता है।

मुझे इन मूल्यों को संरक्षित करने की आवश्यकता क्यों है? क्योंकि मुझे इन चित्रों को एक नए संकल्प के साथ पीएनजी (फ़ाइल आकार के लिए) में परिवर्तित करने की आवश्यकता है और मुद्रण के लिए समान भौतिक आयाम (इंच में इंच/एच) रखें। मुझे भौतिक आयामों को संरक्षित करने के लिए .SetResolution(xDpi,yDpi) के साथ संकल्प मानों के आधार पर नई पिक्सेल चौड़ाई/ऊंचाई की आवश्यकता है, इसलिए यह समस्या नहीं है। मुद्दा PixelFormatSize जैसी चीजें अपरिवर्तित रहने की आवश्यकता है (हाँ, मैंने EncoderParameters की कोशिश की है - वे काम नहीं करते हैं। अगर आपको पसंद है तो मैं आपको गोररी विवरण दे सकता हूं, लेकिन अभी यह कहने के लिए पर्याप्त है, वे सिर्फ काम)।

व्हील, मुझे मेरी छाती से दूर मिला! ठीक है, कोई भी जो वास्तव में जानता है कि यह सब कैसे काम कर सकता है?

संपादित: फ़ाइलें प्रकार में खींचने के लिए PNG में बदलने की जरूरत: बीएमपी, TIF, GIF, WMF, EMF।

+0

परावर्तक आपका मित्र यहां हो सकता है। आप कन्स्ट्रक्टर और एपीआई का एक सटीक संयोजन निर्धारित करने में सक्षम हो सकते हैं जो आपको वही देता है जो आप चाहते हैं। –

+0

धन्यवाद मार्क। मैं परावर्तक से परिचित नहीं हूं, लेकिन मैं इसे एक नज़र दूंगा। संभावित रूप से वादा करता है। –

उत्तर

3

क्यों न केवल Dim targetBitmap As New Bitmap(Image.FromFile(imagePath & myImage1Name, True), newWidth, newHeight)?

+0

बिल्कुल सही, मुझे नहीं पता कि मुझे यह कैसे याद आया! –

3

निम्न कोड जैसा कुछ करने के बारे में क्या है: आप बिटकमैप को न्यूग्राफिक पर ड्रॉ कर सकते हैं। जब आप इसे फिर से निकालते हैं तो आप आकार के साथ गड़बड़ कर सकते हैं।

Dim NewGraphic As Graphics = Nothing 
     Dim OutBMP As Bitmap 

     Using bmp As New Bitmap(3264, 4224) 
      Try 

       NewGraphic = Graphics.FromImage(bmp) 
       NewGraphic.FillRectangle(New SolidBrush(Color.White), 0, 0, 3264, 4224) 
       NewGraphic.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic 
       NewGraphic.SmoothingMode = Drawing2D.SmoothingMode.HighQuality 
       NewGraphic.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality 
       NewGraphic.CompositingQuality = Drawing2D.CompositingQuality.HighQuality 
       NewGraphic.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit 

       NewGraphic.DrawImage(MetaFileToConvert, 0, 0, 3264, 4224) 

       OutBMP = CType(FFConvertToBitonal(CType(bmp, Bitmap)), Bitmap) 
       OutBMP.SetResolution(385, 385) 

       OutImage = DirectCast(OutBMP, Image) 

      Catch ex As Exception 
       Throw ex 
      Finally 
       NewGraphic.Dispose() 

      End Try 

     End Using 
+1

प्रतिक्रिया और कोड के लिए धन्यवाद pehaada, मैं इसकी सराहना करता हूं। दुर्भाग्यवश, मूल ग्रामैप की सेटिंग्स को संरक्षित करने का प्रयास करते समय 'ग्राफ़िक' ऑब्जेक्ट का उपयोग करने से और भी समस्याएं होती हैं। कोड के लिए +1 और विस्तृत प्रतिक्रिया हालांकि! –

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