c# - बाइटमैप इमेज टू बाइट




.net wpf (3)

मेरे पास एक BitmapImage जिसका उपयोग मैं एक WPF अनुप्रयोग में कर रहा हूं, बाद में मैं इसे एक बाइट सरणी के रूप में डेटाबेस में सहेजना चाहता हूं (मुझे लगता है कि यह सबसे अच्छा तरीका है), मैं यह रूपांतरण कैसे कर सकता हूं?

या, वैकल्पिक रूप से, क्या BitmapSource (या इसके किसी भी बेस क्लास, BitmapSource या BitmapSource ) को डेटा रिपॉजिटरी में सहेजने का बेहतर तरीका है?


आपको BitmapEncoder (जैसे BmpBitmapEncoder ) से प्राप्त कक्षा के एक उदाहरण का उपयोग करना होगा और BitmapSource को Stream सहेजने के लिए Save विधि को कॉल करना होगा।

आप उस प्रारूप के आधार पर विशिष्ट एन्कोडर चुनेंगे जिसे आप छवि को सहेजना चाहते हैं।


इसे MemoryStream लिखें, फिर आप वहां से बाइट्स तक पहुंच सकते हैं। कुछ इस प्रकार है:

public Byte[] ImageToByte(BitmapImage imageSource)
{
    Stream stream = imageSource.StreamSource;
    Byte[] buffer = null;
    if (stream != null && stream.Length > 0)
    {
        using (BinaryReader br = new BinaryReader(stream))
        {
            buffer = br.ReadBytes((Int32)stream.Length);
        }
    }

    return buffer;
}

बाइट में कनवर्ट करने के लिए [] आप मेमोरीस्ट्रीम का उपयोग कर सकते हैं:

byte[] data;
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
using(MemoryStream ms = new MemoryStream())
{
    encoder.Save(ms);
    data = ms.ToArray();
}

JpegBitmapEncoder के बजाय आप कैस्पर के रूप में जो भी बिटमैप एन्कोडर पसंद करते हैं उसका उपयोग कर सकते हैं।

यदि आप एमएस एसक्यूएल का उपयोग कर रहे हैं तो आप एक image कॉलम का भी उपयोग कर सकते हैं क्योंकि एमएस एसक्यूएल उस डेटाटाइप का समर्थन करता है, लेकिन आपको अभी भी बिटमैप image को किसी भी तरह से परिवर्तित करने की आवश्यकता होगी।





imagesource