आप एमएस एक्सेस से सीधे डेटा पढ़ रहे हैं, तो आप किसी भी हेडर सूचना पट्टी की जरूरत नहीं है।
छवि मान लिया जाये कि एक BLOB, जो सबसे आम है के रूप में संग्रहीत किया जाता है, यहाँ डेटाबेस और एक छवि फ़ाइल के रूप में की दुकान (क्षमा करें, बजाय सी # के वीबी) से बाइट्स की सरणी में पढ़ने के लिए कोड है:
Dim varBytes() As Byte
Using cn As New OleDbConnection(myConnectionString)
cn.Open()
sqlText = "SELECT [myColumn] " _
& "FROM [myTable] " _
& "WHERE ([mySearchCriteria] = '" & mySearchTerm & "')"
Using cm As New OleDbCommand(sqlText, cn)
Dim rdr As OleDbDataReader
rdr = cm.ExecuteReader
rdr.Read()
varBytes = rdr.GetValue(0)
End Using
End Using
My.Computer.FileSystem.WriteAllBytes(myPath & "\myFile.emf", varBytes, True)
यह उदाहरण है कि मैंने चारों ओर बिछाया था, जहां मुझे पता था कि डेटाबेस में फ़ाइलों को .emf छवियां थीं। यदि आप एक्सटेंशन जानते हैं, तो आप इसे फ़ाइल नाम पर डाल सकते हैं। यदि आप नहीं करते हैं, तो आप इसे खाली छोड़ सकते हैं और फिर परिणामस्वरूप एक दर्शक दर्शक के साथ खोल सकते हैं; इसे शुरू करना चाहिए। यदि आपको एक्सटेंशन या फ़ाइल प्रकार खोजने की आवश्यकता है, तो इसे फ़ाइल के रूप में सहेजने के बाद, आप इसे किसी भी हेक्स संपादक के साथ खोल सकते हैं और फ़ाइल प्रकार हेडर जानकारी से उपलब्ध होगा।
आपका प्रश्न थोड़ा अस्पष्ट है, इसलिए मुझे यकीन नहीं है कि उपर्युक्त कोड बिल्कुल वही है जो आप चाहते हैं, लेकिन यह आपको बहुत करीब ले जाना चाहिए।
संपादित करें:
यह VB कोड है कि एक MemoryStream वस्तु में बाइट्स की सरणी लेता है, भार यह, और फिर स्ट्रीम से एक छवि वस्तु बनाता है। कोड का यह बिट बस ठीक काम करता था, और मेरे फॉर्म पर एक चित्र बॉक्स में छवि प्रदर्शित करता था।
Dim img As Image
Dim str As New MemoryStream(varBytes)
img = Image.FromStream(str)
PictureBox1.Image = img
इस के सी # बराबर आप के लिए काम नहीं कर रहा है, तो समस्या कैसे छवि एमएस एक्सेस डेटाबेस में संग्रहीत किया जाता है में होने की संभावना है।
संपादित करें:
अपने डेटाबेस में छवि एक 'पैकेज' है न कि 'लांग बाइनरी डेटा' के रूप में संग्रहीत किया जाता है, तो आप शीर्ष लेख जानकारी है कि एमएस एक्सेस कहते पट्टी की जरूरत होगी। मैं एक सरल .jpg फ़ाइल के साथ 'पैकेज' छवि भंडारण प्रकार के साथ खेल रहा हूं। इस मामले में हेडर 78 बाइट्स से काफी लंबा है। इस उदाहरण में, यह वास्तव में 234 बाइट्स है, और एमएस एक्सेस ने मूल फ़ाइल के अंत में कुछ जानकारी भी जोड़ दी है; इस मामले में लगभग 2 9 2 बाइट्स।
ऐसा लगता है कि आपका मूल दृष्टिकोण सही था, आपको बस यह निर्धारित करने की आवश्यकता होगी कि कितनी बाइट्स आपकी स्थिति के लिए बाइट सरणी के आगे और पीछे की ओर पट्टी कर सकती हैं।
मैंने मूल छवि फ़ाइल की तुलना करके, और एक हेक्स संपादक में डेटाबेस से निर्यात की गई फ़ाइल (स्ट्रीम ऑब्जेक्ट पर नहीं, मेरा पहला कोड देखें) की तुलना करके इसे अपनी फ़ाइल के लिए निर्धारित किया। एक बार जब मुझे पता चला कि एमएस एक्सेस द्वारा कितनी जानकारी (हेडर और पाद लेख) जोड़ा गया था, तो मुझे पता था कि कितने बाइट को छीनने की आवश्यकता है।
संपादित करें:
हैडर एमएस एक्सेस से जोड़ा जब छवि के रूप में 'पैकेज' शब्द हटाएं फ़ाइल प्रकार के आधार पर, और छवि जब के मूल स्थान (पूरा पथ जानकारी) संग्रहीत किया जाता है के आकार इसे एमएस एक्सेस डेटाबेस में डाला गया था। तो, यहां तक कि एक ही फ़ाइल प्रकार के लिए, आपके पास प्रत्येक फ़ाइल के लिए शीर्षलेख से स्ट्रिप करने के लिए बाइट्स की एक अलग संख्या हो सकती है। इससे यह बहुत कठिन हो जाता है, क्योंकि तब तक आपको बाइट सरणी स्कैन करना होगा जब तक आपको उस फ़ाइल प्रकार के लिए सामान्य स्टार्ट-ऑफ-फ़ाइल जानकारी नहीं मिलती, और फिर इससे पहले सब कुछ पट्टी करें।
यह सभी सिरदर्द एक कारण है कि छवियों को डेटाबेस में बीएलओबी 'लांग बाइनरी डेटा' के रूप में स्टोर करना बेहतर होता है। पुनर्प्राप्ति बहुत आसान है। मुझे नहीं पता कि आपके पास ऐसा करने का विकल्प है, लेकिन यदि ऐसा है, तो यह एक अच्छा विचार होगा।
जब आप एमएस एक्सेस तालिका है कि आपके छवि कॉलम होता है देखने के लिए, क्या पाठ आप क्षेत्र में देखते हैं? क्या यह 'लांग बाइनरी डेटा' या कुछ अलग है? – Stewbob