2009-06-24 8 views
7

की अधिलेखन है.मुझे छवियों का आकार और साथ बदलना चाहते हैं वर्ष images.So जब मैं मौजूदा नाम के साथ को बचाने के लिए कोशिश कर रहा हूँ, सहेजें विधि एक त्रुटि फेंक है .लेकिन मैं नव निर्मित resized छवि के लिए एक ही फ़ाइल नाम करना चाहते हैं अगर मैं एक अलग नाम यह saved.But हो रही है क्योंकि मुझे मौजूदा फ़ाइल को नई फ़ाइल के साथ ओवरराइट करने की आवश्यकता है जिसका आकार बदल गया है। किसी भी विचार से आगे कैसे जाना है। मेरे कोडसी #: GDI +: मैं एक ASP.NET सी # पेज जहां मैं एक फ़ोल्डर में छवियों का आकार कर रहा हूँ मैं GDI उपयोग कर रहा हूँ + क्या करना है एक छवि विधि में सहेजें का उपयोग बिटमैप

 oldImagePath= oldImagePath.Replace(".jpg", "NEW.jpg"); 

     try 
     { 
      ImageCodecInfo[] Info = ImageCodecInfo.GetImageEncoders(); 
      EncoderParameters Params = new EncoderParameters(1); 
      Params.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); 
      target.Save(oldImagePath, Info[1], Params); 
     } 

अगर मैं टिप्पणी पहली पंक्ति जो गंतव्य फ़ाइल के लिए कोई नया नाम बनाता है, यह काम नहीं करेगा है।, अन्य Wose यह मैं एक ही नाम .Any सोचा करना चाहते हैं will.But? ? ? अग्रिम

उत्तर

11

धन्यवाद आप पहले मूल फ़ाइल को हटाने की जरूरत है। जब आप नेट में छवि हेरफेर के साथ काम कर रहे हैं, तो आप एक में स्मृति वस्तु जिसका बाइट्स मूल छवि को पढ़ने की आबादी रहे थे के साथ काम कर रहे हैं - यह भेद करना जरूरी है। आप वास्तविक मूल छवि के साथ काम नहीं कर रहे हैं। तो जब आप इस पूरी तरह से नई वस्तु को सहेजने के लिए जाते हैं (जो किसी मौजूदा छवि से डेटा का उपयोग होता है), और आप पहले से उपयोग में आने वाले पथ का उपयोग करने का प्रयास करते हैं, तो आपको अपवाद मिलेगा।

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

+0

बहुत अपने देश में होता है,:

आप निम्नलिखित तरीके से ऐसा कर सकते हैं। – deadManN

18

आप निम्न पंक्ति में तकनीक का उपयोग कर

Image imgPhoto = Image.FromFile("myphoto.jpg"); 

तो यह एक संभाल फ़ाइल के लिए खुला तो जब आप यह फ़ाइल को अधिलेखित करने का प्रयास रहता है वर्तमान में उपयोग में अब भी है और इसलिए आप कर रहे हैं एक छवि को लोड करते हैं इसे लिखने में असमर्थ।

यदि आप फ़ाइल को स्ट्रीम में लोड करते हैं, तो यह आपको मूल फ़ाइल को ओवरराइट करने की अनुमति देता है क्योंकि फ़ाइल की हैंडल को मुक्त किया गया है क्योंकि छवि की जानकारी स्मृति में लिखी गई है। यह सबसे अच्छा विचार नहीं है

बाहर रोशनी की
FileStream fs = new FileStream("myphoto.jpg", FileMode.Open); 
Image imgPhoto = Image.FromStream(fs); 
fs.Close(); 
+0

http://msdn.microsoft.com/en-us/library/93z9ee4x(v=vs.110).aspx: "। आप धारा छवि के जीवन भर के लिए खुला रखना चाहिए" – Tewr

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