दिलचस्प पोस्ट
आईओएस 7 आईपैड सफारी लैंडस्केप इनरहइट / बाहरी हाइट लेआउट इश्यू "शब्द-ब्रेक: ब्रेक-ऑल" बनाम "वर्ड-रैप: ब्रेक-वर्ड" सीएसएस में क्या अंतर है? जावा इंटरफेस? Django- पंजीकरण और Django- प्रोफाइल, अपने खुद के कस्टम प्रपत्र का उपयोग कर सी में बिट-फ़ील्ड का उपयोग कब करना है? RecyclerView अंदर ScrollView लचीला Recycler आइटम ऊंचाई के साथ का उपयोग करें त्रुटि: (23, 17) हल करने में असफल: जनीट: जनीट: 4.12 रूबी स्थानीय चर अपरिभाषित है 2 फ़ंक्शन एक ही समय में चलाएं जावा संकलित वर्गों में डॉलर के संकेत होते हैं <My code> में त्रुटि: असाइनमेंट का लक्ष्य गैर-भाषा ऑब्जेक्ट का विस्तार करता है एक वृत्त में एक छवि फसल या मुखौटा "टी" क्या सी # में है? यूआरएल Slugify एल्गोरिथ्म सी # में? कैसे मैं गतिशील रूप से एक वर्ग को सी # में जोड़ सकता हूँ

बिटमैप छवि को बिटमैप में बदलने और इसके विपरीत

मेरे पास सी # में बिटमैप इमेज है मुझे छवि पर काम करने की आवश्यकता है I उदाहरण के लिए, छवि पर पाठ जोड़ने, आदि स्केलिंग

मुझे स्केकेवरफ्लो में ग्रेस्कलिंग के लिए फ़ंक्शन मिल गया है, जो बिटमैप स्वीकार करता है और बिटमैप देता है।

इसलिए मुझे बिटमैप इमेज को बिटमैप में बदलने की आवश्यकता है, ऑपरेशन करें और वापस कन्वर्ट करें।

मैं यह कैसे कर सकता हूँ? यह सबसे अच्छा तरीका है?

Solutions Collecting From Web of "बिटमैप छवि को बिटमैप में बदलने और इसके विपरीत"

विदेशी पुस्तकालयों का उपयोग करने की कोई आवश्यकता नहीं है

बिटमैप को बिटमैप छवि कनवर्ट करें:

private Bitmap BitmapImage2Bitmap(BitmapImage bitmapImage) { // BitmapImage bitmapImage = new BitmapImage(new Uri("../Images/test.png", UriKind.Relative)); using(MemoryStream outStream = new MemoryStream()) { BitmapEncoder enc = new BmpBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(bitmapImage)); enc.Save(outStream); System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream); return new Bitmap(bitmap); } } 

बिटमैप को वापस बिटमैप इमेज में परिवर्तित करने के लिए:

 [System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); private BitmapImage Bitmap2BitmapImage(Bitmap bitmap) { IntPtr hBitmap = bitmap.GetHbitmap(); BitmapImage retval; try { retval = (BitmapImage)Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); } finally { DeleteObject(hBitmap); } return retval; } 

बिटमैप को बिटमैप इमेज में परिवर्तित करने के लिए यहां एक एक्सटेंशन विधि है।

  public static BitmapImage ToBitmapImage(this Bitmap bitmap) { using (var memory = new MemoryStream()) { bitmap.Save(memory, ImageFormat.Png); memory.Position = 0; var bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = memory; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); bitmapImage.Freeze(); return bitmapImage; } } 

System.Windows.Interop का उपयोग कर; …

  private BitmapImage Bitmap2BitmapImage(Bitmap bitmap) { BitmapSource i = Imaging.CreateBitmapSourceFromHBitmap( bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); return (BitmapImage)i; } 

मैं सिर्फ अपने कोड में उपर्युक्त प्रयोग करने की कोशिश कर रहा हूं और मुझे विश्वास है कि बिटमैप 2 बिटमैप इमेज फ़ंक्शन (और संभवत: अन्य एक भी) के साथ एक समस्या है।

 using (MemoryStream ms = new MemoryStream()) 

क्या धारा में उपरोक्त रेखा परिणाम निकलता है? जिसका अर्थ है कि लौटा बिटमैपइमेज अपनी सामग्री खो देता है।

जैसा कि मैं एक WPF नौसिखिया हूँ, मुझे यकीन नहीं है कि यह सही तकनीकी व्याख्या है, लेकिन कोड मेरे आवेदन में तब तक काम नहीं करता जब तक कि मैं निर्देशन का उपयोग नहीं करता।

अगर आपको सिर्फ बिटमैप इमेज से बिटमैप जाना है तो यह काफी आसान है,

 private Bitmap BitmapImage2Bitmap(BitmapImage bitmapImage) { return new Bitmap(bitmapImage.StreamSource); } 

यह System.Drawing.Bitmap से BitmapImage में कनवर्ट करता है:

 MemoryStream ms = new MemoryStream(); YOURBITMAP.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); BitmapImage image = new BitmapImage(); image.BeginInit(); ms.Seek(0, SeekOrigin.Begin); image.StreamSource = ms; image.EndInit(); 

यहाँ async संस्करण

 public static Task<BitmapSource> ToBitmapSourceAsync(this Bitmap bitmap) { return Task.Run(() => { using (System.IO.MemoryStream memory = new System.IO.MemoryStream()) { bitmap.Save(memory, ImageFormat.Png); memory.Position = 0; BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = memory; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); bitmapImage.Freeze(); return bitmapImage as BitmapSource; } }); } 

धन्यवाद गिलर्मो हर्नांडेज़, मैंने आपके कोड का एक भिन्नता बनाया जो काम करता है मैंने संदर्भ के लिए इस कोड में नामस्थान जोड़े।

 System.Reflection.Assembly theAsm = Assembly.LoadFrom("My.dll"); // Get a stream to the embedded resource System.IO.Stream stream = theAsm.GetManifestResourceStream(@"picture.png"); // Here is the most important part: System.Windows.Media.Imaging.BitmapImage bmi = new BitmapImage(); bmi.BeginInit(); bmi.StreamSource = stream; bmi.EndInit(); 

आप AForge.Net का उपयोग कर सकते हैं

विशेष रूप से, इस AForge.Net से निम्नलिखित उदाहरण देखें पोस्ट शुरू हो रही है :

 using AForge.Imaging.Filters; // Loading some file using (Bitmap SampleImage = (Bitmap)Image.FromFile("test.jpg")) { // We must convert it to grayscale because // the filter accepts 8 bpp grayscale images Grayscale GF = new Grayscale(0.2125, 0.7154, 0.0721); using (Bitmap GSampleImage = GF.Apply(SampleImage)) { // Saving the grayscale image, so we could see it later GSampleImage.SaveAsJpeg("testBW.jpg", 100); } } 

HTH