2012-09-07 16 views
6

में बाइट सरणी से छवि को कैसे दिखाया जाए, मैं रिपोर्ट रिपोर्ट का उपयोग कर रहा हूं और एक रिपोर्ट देखने के लिए एक रिपोर्ट व्यूअर नियंत्रण का उपयोग कर रहा हूं जो रन-टाइम के दौरान ऑब्जेक्ट्स से गतिशील रूप से डेटा लोड करता है।माइक्रोसॉफ्ट रिपोर्ट

मुझे ऑब्जेक्ट में बाइट सरणी के रूप में संग्रहीत एक छवि दिखाने की आवश्यकता है।

PictureBox के मूल्य वर्तमान में पर सेट है:

=First(Fields!ImageData.Value, "dtstItemImage") 

और मैं डेटा स्रोत का उपयोग कर सेट:

ImageBindingSource.DataSource = this.item.Image.ImageData; 

कोड संकलित करता है तथा रन लेकिन छवि रिपोर्ट में प्रदर्शित नहीं है।

ऐसा इसलिए है क्योंकि पिक्चरबॉक्स को छवि ऑब्जेक्ट (और बाइट सरणी नहीं) से बाध्य होना चाहिए? या शायद पिक्चरबॉक्स के कुछ गुण हैं जिन्हें मुझे सेट करने की ज़रूरत है?

UPDATE 1

मैं बस यह सुनिश्चित करें कि अपने दिखाई है और यह रिपोर्ट में दिखाई देते है बनाने के लिए PictureBox करने के लिए एक सीमा जोड़ दिया है। इसमें सिर्फ छवि नहीं है।

अद्यतन 2

मैं अपने कोड में एक गलती ठीक कर दी है। मैं बदल दिया है:

ImageBindingSource.DataSource = this.item.Image.ImageData; 

रहे हैं:

ImageBindingSource.DataSource = this.item.Image; 

रूप PictureBox ImageData क्षेत्र के लिए बाध्य है, लेकिन डेटा स्रोत छवि वस्तु है।

अब मुझे कुछ भी नहीं होने के बजाय एक छोटा सा क्रॉस आइकन मिलता है (कम से कम मेरे लिए) कुछ प्रगति इंगित करता है लेकिन मुझे नहीं पता कि बाइट [] - बिटमैप रूपांतरण कोड कहां होना चाहिए।

+0

छवि प्रारूपित कैसे है? आपको शायद बाइट स्ट्रीम को deserialize करने की जरूरत है: http://stackoverflow.com/questions/1156608/feedback-on-code-to-serialize-deserialize-and-save-image – MrFox

+0

"स्वरूपित" से आपका क्या मतलब है? बाइट सरणी में छवि डेटाबेस बीएलओबी सेल से ली गई है और एक जेपीईजी है। – Rachel

+0

@ राहेल, श्रीफॉक्स (और नीचे स्वयं) इस बात का जिक्र कर रहे हैं कि छवि बाइट सरणी में कैसे एन्कोड की गई थी। सीमाओं के साथ संरेखित करने के लिए आपको बाइट्स को पैड करने की आवश्यकता हो सकती है। देखें कि मैंने इस क्यू एंड ए में यह कैसे किया है http://stackoverflow.com/questions/2750342/unsigned-char-buffer-freetype2-bitmap-to-systemdrawingbitmap – Dennis

उत्तर

3

मैं (यह पहले से External करने के लिए सेट किया गया था) रिपोर्ट के छवि बॉक्स Database को Source संपत्ति की स्थापना द्वारा इस का समाधान करने में कामयाब रहे।

विभिन्न उपलब्ध स्रोत मानों के बारे में अधिक जानकारी (MSDN) HowTo: Add an Image (Reporting Services) पर मिल सकती है।

1

आपको बाइट सरणी से एक छवि ऑब्जेक्ट बनाने और स्रोत के रूप में उपयोग करने की आवश्यकता है।

ऐसा करने के लिए, आप निम्न

public static Image LoadImage(byte[] imageBytes) 
{ 
    Image image = null; 
    using (var ms = new MemoryStream(imageBytes)) 
     image = Image.FromStream(ms); 

    return image; 
} 

संपादित

WPF के लिए की तरह एक सहायक समारोह का उपयोग कर सकते हैं, तो आप MSDNImage की BitmapSource (MSDN) का उपयोग करने के बजाय जरूरत है ()

public static BitmapSource LoadImage(Byte[] imageBytes) 
{ 
    var image = new BitmapImage(); 
    using (var ms = new MemoryStream(binaryData)) 
    { 
     image.BeginInit(); 
     image.StreamSource = ms; 
     image.CacheOption = BitmapCacheOption.OnLoad; 
     image.EndInit(); 
    } 

    if (image.CanFreeze) 
     image.Freeze(); 

    return image; 
} 

एनबी: आप इसे IValueConverter का उपयोग करके भी कर सकते हैं, यह blog post for the source code देखें।


और उसके बाद संशोधित अपने डेटा बाइंडिंग

ImageBindingSource.DataSource = LoadImage(item.Image.ImageData); 

...

के रूप में अन्यथा आप का रिसाव हो जाएगा सुनिश्चित करें कि छवि (और MemoryStream) ठीक से निपटान किया जाता है जब आप इसे के साथ समाप्त करें, याद।

इसके अलावा, आपके बाइट सरणी के प्रारूप के आधार पर आपको कुछ काम करने की आवश्यकता हो सकती है। मेरे question/answers for some helpful information में से एक देखें।

+0

मैंने कोशिश की है और यह या तो काम नहीं करता है। ऐसा लगता है कि पिक्चरबॉक्स रिपोर्ट में भी नहीं है। – Rachel

+0

भी यू को मेमोरी स्ट्रीम का निपटान करना चाहिए। 'छवि वापसी छवि; का उपयोग कर (मेमोरीस्ट्रीम एमएस = नई मेमोरीस्ट्रीम (बाइट्स)) {returnImage = Image.FromStream (ms);} वापसी वापसी छवि; ' – Dmytro

+0

अभी भी काम नहीं किया है। मुझे image.StreamSource = ms का उपयोग करना पड़ा क्योंकि .SetSource विधि नहीं मिली थी। क्या यह समस्या हो सकती है? – Rachel

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