2010-08-20 13 views
6

मुझे यह स्वीकार करना होगा कि मैंने कभी नहीं समझा कि धाराएं क्या हैं - मैंने हमेशा सोचा कि यह एक इंटरनेट चीज है। लेकिन अब मैं एक कोड है कि एक धारा का इस्तेमाल किया localy एक फ़ाइल को लोड करने में चलाने के लिए और मुझे आश्चर्य है कि वहाँ पर जिस तरह से मैं हमेशा भरी हुई फ़ाइलें एक धारा का उपयोग कर ... अच्छी तरह से करने के लिए लाभ है यदि:एक तस्वीर फ़ाइल लोड हो रहा है Image.FromFile VS FileStream

private void loadingfromStream() 
{ 
    DirectoryInfo dirInfo = new DirectoryInfo("c:/"); 
    FileInfo[] fileInfoArr = dirInfo.GetFiles(); 
    FileInfo fileInfo = fileInfoArr[0];  

    // creating a bitmap from a stream 
    FileStream fileStream = fileInfo.OpenRead();    
    Bitmap bitmap = new Bitmap(fileStream); 
    Image currentPicture = (Image)bitmap  
} 

बनाम

private void loadingUsingImageClass 
{  
    Image currentPicture = Image.FromFile(originalPath); 
} 

उत्तर

15

क्या आप जानते हैं हैं अपने कोड एक फ़ाइल से डेटा लोड हो रहा हो जाएगा, Image.FromFile का उपयोग करें - यह स्पष्ट रूप से नहीं बल्कि सरल कोड है, और यह सिर्फ संभव है ढांचे के भीतर अनुकूलन देखते हैं कि जब यह फ़ाइलों के साथ काम कर रहा है।

स्ट्रीम का उपयोग करना अधिक लचीला है, लेकिन जब तक कि आप को की आवश्यकता नहीं है, तो लचीलापन, फ़ाइल समाधान के साथ जाएं।

+0

जब मेरी छवि की आवश्यकता होती है तो मुझे कौन सी विधि बेहतर होती है, एक ही समय में कई बिंदुओं से पहुंचा जा सकता है? छवि को एक ही समय में 3 स्थानों पर दिखाने और संपादित करने की तरह। – iamCR

+0

@ संतोष कुमार: जवाब देना मुश्किल है कि बिना किसी जानकारी के, जो एक अलग प्रश्न में होना चाहिए। मैं उम्मीद करता हूं कि 'Image.FromFile' ठीक रहेगा। –

2

एक के रूप में Jon's जवाब देने के लिए एक अतिरिक्त:

जहां तक ​​मैं देख रहा हूँ, दो तरीकों या तो एक ही बात नहीं करते हैं। सबसे पहले आपको "C:\" में पहली छवि दी गई है जहां दूसरा आपको पथ से एक छवि देता है। तो पहले में जोड़ा गया जटिलता सिर्फ इसलिए नहीं है क्योंकि यह धाराओं का उपयोग कर रही है।

यह बराबर होगा:

using (var fs = File.OpenRead(path)) 
using (var img = Image.FromStream(fs)) 
{ 
    //... 
} 

और उस स्थिति में, यह निश्चित रूप से बेहतर है बस Image.FromFile साथ यह करने के लिए के रूप में जॉन की व्याख्या की।

3

यदि आप छवि फ़ाइलों से निपटना चाहते हैं, तो निश्चित रूप से दूसरा समाधान बेहतर है। आपके पहले खंड में, आपके पास Bitmap bitmap = new Bitmap(fileStream); है, आप जानते हैं कि एक छवि फ़ाइल हमेशा बिटमैप नहीं होती है, यह जेपीईजी/पीएनजी/टीआईएफएफ भी हो सकती है। जबकि Image.FromFile विभिन्न एक्सटेंशन के साथ छवि फ़ाइलों से निपटने के लिए काफी पेशेवर है।

आम तौर पर, FileStream फ़ाइल समस्याओं पर आम है, जबकि Image.FromFile छवि फ़ाइलों पर अधिक विशिष्ट है। यह इस बात पर निर्भर करता है कि आप किस प्रकार की फाइलों से निपटने जा रहे हैं।

2

खैर, एक फ़ाइल को अक्सर स्ट्रीम के रूप में भी माना जाता है। यही कारण है कि प्राथमिक वर्ग फ़ाइलों को खोलने के लिए फ़ाइलस्ट्रीम कहा जाता है। लेकिन एक विशिष्ट ऑपरेटिंग सिस्टम सुविधा है जो छवि फ़ाइलों से बहुत अधिक कुशलता से निपट सकती है। इसे 'मेमोरी मैप किए गए फाइल' कहा जाता है, यह एक सुविधा है जो फ़ाइल की सामग्री को सीधे स्मृति में मैप करती है। इसमें कुछ धूम्रपान और दर्पण शामिल हैं, लेकिन यह अनिवार्य रूप से फ़ाइल को पढ़ने के बिना सीधे उपलब्ध कराता है। फ़ाइल डेटा को स्टोर करने के लिए आपको जिस मेमोरी की आवश्यकता है वह पेजिंग फ़ाइल में जगह नहीं लेता है।

बहुत ही कुशल, आप इसे मुफ्त में प्राप्त करेंगे जब आप .bmp प्रारूप में किसी छवि के लिए FromFile() या बिटमैप (स्ट्रिंग) कन्स्ट्रक्टर का उपयोग करते हैं। स्ट्रीम से एक छवि लोड करने के लिए दो बार मेमोरी की मात्रा, हमेशा बड़ी छवियों के साथ एक समस्या की आवश्यकता होती है।

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