2009-03-10 14 views
26

मुझे अपने कोड में "पैरामीटर मान्य नहीं" अपवाद हो रही है:"पैरामीटर मान्य नहीं" अपवाद लोड हो रहा है System.Drawing.Image

MemoryStream ms = new MemoryStream(byteArrayIn); 
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms); 

byteArrayIn की लंबाई 169014. मैं के बावजूद यह अपवाद हो रही है तथ्य यह है कि इसमें कोई मूल्य 255 से अधिक नहीं है।

+1

कृपया प्रारूप आपका प्रश्न ठीक से –

+0

'इसमें कोई भी मूल्य 255 से अधिक नहीं है, गलत वाक्यांश है, इसका नकारात्मक नकारात्मक, इसे सकारात्मक बनाता है। तो आप कहते हैं कि सभी मान 255 से ऊपर हैं। मुझे लगता है कि आप का मतलब है कि वे 255 के बराबर या बराबर हैं, जो एक बाइट का आंतरिक बाधा है। –

उत्तर

3

कौन सी लाइन अपवाद फेंक रही है? new MemoryStream(...)? या Image.FromStream(...)? और byteArrayIn क्या है? क्या यह byte[] है? मैं केवल टिप्पणी के कारण पूछता हूं "और इसमें कोई भी मूल्य 255 से अधिक नहीं है" - जो निश्चित रूप से byte[] के लिए स्वचालित है।

एक और स्पष्ट प्रश्न के रूप में: क्या बाइनरी में वास्तव में एक समझदार प्रारूप में एक छवि होती है?

उदाहरण के लिए, निम्नलिखित (नहीं महान कोड हालांकि) ठीक काम करता है:

byte[] data = File.ReadAllBytes(@"d:\extn.png"); // not a good idea... 
    MemoryStream ms = new MemoryStream(data); 
    Image img = Image.FromStream(ms); 
    Console.WriteLine(img.Width); 
    Console.WriteLine(img.Height); 
13

मेरा अनुमान है कि byteArrayIn वैध छवि डेटा नहीं है।

अधिक जानकारी दे कृपया हालांकि:

  • कोड के किस लाइन एक अपवाद फेंक रहा है?
  • संदेश क्या है?
  • आप कहाँ से byteArrayIn मिलता है, और आप यकीन है कि यह एक वैध छवि को शामिल करना चाहिए रहे हैं किया?
+1

धन्यवाद जॉन, इस उत्तर ने मुझे मेरे पैरामीटर का समाधान खोजने की अनुमति दी है, यह वैध अपवाद नहीं है। आपके लिए +1 – Sebastian

+0

दरअसल, मुझे लगता है कि उस मामले में "पैरामीटर वैध नहीं है" लगभग हमेशा भ्रष्ट/अमान्य डेटा इंगित करता है – Yandros

17

मैं इस के बावजूद एक ही समस्या थी और जाहिरा तौर पर अब हल हो गया है, और कुछ अन्य GDI + अपवाद बहुत भ्रामक हैं, मैंने पाया कि वास्तव में समस्या यह है कि पैरामीटर एक बिटमैप निर्माता को भेजा जा रहा मान्य नहीं था।

using (System.IO.FileStream fs = new System.IO.FileStream(inputImage, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite)) 
{ 
    try 
    { 
     using (Bitmap bitmap = (Bitmap)Image.FromStream(fs, true, false)) 
     { 
      try 
      { 
       bitmap.Save(OutputImage + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp); 
       GC.Collect(); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 
    } 
    catch (ArgumentException aex) 
    { 
     throw new Exception("The file received from the Map Server is not a valid jpeg image", aex); 
    } 
} 

निम्न पंक्ति एक त्रुटि पैदा कर रहा था:

Bitmap bitmap = (Bitmap)Image.FromStream(fs, true, false) 

फ़ाइल धारा मानचित्र सर्वर से डाउनलोड की गई फ़ाइल से बनाया गया था कि मैं इस कोड है। मेरा ऐप अनुरोध भेज रहा था गलत तरीके से छवि प्राप्त करने, और सर्वर जेपीजी विस्तार के साथ कुछ लौट रहा था, लेकिन वास्तव में एक एचटीएमएल मुझे बता कि एक त्रुटि हुई थी। तो मैं उस छवि को ले रहा था और इसके साथ एक बिटमैप बनाने की कोशिश कर रहा था। ठीक पर नियंत्रण/एक वैध jpeg छवि के लिए छवि को मान्य किया गया था।

उम्मीद है कि यह मदद करता है!

1

"पैरामीटर मान्य नहीं है" Image.FromStream() द्वारा फेंका अपवाद आपको बताता है कि धारा एक 'वैध' या 'मान्यता प्राप्त' प्रारूप नहीं है। मेमोरी स्ट्रीम देखें, खासकर अगर आप फाइल से बाइट्स के विभिन्न ऑफसेट ले रहे हैं।

// 1. Create a junk memory stream, pass it to Image.FromStream and 
// get the "parameter is not valid": 
MemoryStream ms = new MemoryStream(new Byte[] {0x00, 0x01, 0x02}); 
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);` 

// 2. Create a junk memory stream, pass it to Image.FromStream 
// without verification: 
MemoryStream ms = new MemoryStream(new Byte[] {0x00, 0x01, 0x02}); 
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms, false, true); 

उदाहरण 2, काम पर ध्यान दें validateImageData मान्य होने के लिए कि useEmbeddedColorManagement झूठी होना चाहिए होगा।

मेमोरी स्ट्रीम को फ़ाइल में डंप करके और सामग्री का निरीक्षण करके डीबग करना सबसे आसान हो सकता है।

1

यह त्रुटि बाइनरी डेटा के कारण होता है एक बफर में डाला जा रहा। इस समस्या को हल करने के लिए, आपको अपने कोड में एक कथन डालना चाहिए।

यह बयान है:

obj_FileStream.Read(Img, 0, Convert.ToInt32(obj_FileStream.Length)); 

उदाहरण:

FileStream obj_FileStream = new FileStream(str_ImagePath, FileMode.OpenOrCreate, FileAccess.Read); 
Byte[] Img = new Byte[obj_FileStream.Length]; 
obj_FileStream.Read(Img, 0, Convert.ToInt32(obj_FileStream.Length));   
dt_NewsFeedByRow.Rows[0][6] = Img; 
-2

सब समाधान does not काम दिया .. केवल वापस लाने भाग पर ध्यान केंद्रित नहीं है। छवि डालने पर ल्यूक। मैंने वही गलती की। मैं हार्ड डिस्क से एक छवि tuk और इसे डेटाबेस में सहेजा। समस्या डालने कमांड में निहित है। मेरी गलती कोड पर luk ..:

public bool convertImage() 
    { 
     try 
     { 
      MemoryStream ms = new MemoryStream(); 
      pictureBox1.Image.Save(ms, ImageFormat.Jpeg); 
      photo = new byte[ms.Length]; 
      ms.Position = 0; 
      ms.Read(photo, 0, photo.Length); 
      return true; 
     } 
     catch 
     { 
      MessageBox.Show("image can not be converted"); 
      return false; 
     } 
    } 
    public void insertImage() 
    { 
     // SqlConnection con = new SqlConnection(); 
     try 
     { 
      cs.Close(); 
      cs.Open(); 
      da.UpdateCommand = new SqlCommand("UPDATE All_students SET disco = " +photo+" WHERE Reg_no = '" + Convert.ToString(textBox1.Text)+ "'", cs); 
      da.UpdateCommand.ExecuteNonQuery(); 
      cs.Close(); 
      cs.Open(); 
      int i = da.UpdateCommand.ExecuteNonQuery(); 
      if (i > 0) 
      { 
       MessageBox.Show("Successfully Inserted..."); 
      } 

     } 
     catch 
     { 
      MessageBox.Show("Error in Connection"); 
     } 
     cs.Close(); 
    } 

ऊपर कोड सफलतापूर्वक डाला शो ... लेकिन वास्तव में इसका गलत डेटाप्रकार .. के रूप में छवि को सहेजने डेटाप्रकार "छवि" बीटी चाहिए जबकि .. तो मैं कोड में सुधार हुआ ..

public bool convertImage() 
    { 
     try 
     { 
      MemoryStream ms = new MemoryStream(); 
      pictureBox1.Image.Save(ms, ImageFormat.Jpeg); 
      photo = new byte[ms.Length]; 
      ms.Position = 0; 
      ms.Read(photo, 0, photo.Length); 
      return true; 
     } 
     catch 
     { 
      MessageBox.Show("image can not be converted"); 
      return false; 
     } 
    } 
    public void insertImage() 
    { 
     // SqlConnection con = new SqlConnection(); 
     try 
     { 
      cs.Close(); 
      cs.Open(); 
      //THIS WHERE THE CODE MUST BE CHANGED>>>>>>>>>>>>>> 

      da.UpdateCommand = new SqlCommand("UPDATE All_students SET disco = @img WHERE Reg_no = '" + Convert.ToString(textBox1.Text)+ "'", cs); 
      da.UpdateCommand.Parameters.Add("@img", SqlDbType.Image);//CHANGED TO IMAGE DATATYPE... 
      da.UpdateCommand.Parameters["@img"].Value = photo; 
      da.UpdateCommand.ExecuteNonQuery(); 
      cs.Close(); 
      cs.Open(); 
      int i = da.UpdateCommand.ExecuteNonQuery(); 
      if (i > 0) 
      { 
       MessageBox.Show("Successfully Inserted..."); 
      } 

     } 
     catch 
     { 
      MessageBox.Show("Error in Connection"); 
     } 
     cs.Close(); 
    } 

100% गारंटी है कि वहाँ कोई पैरामीटर नहीं पुन: प्राप्त करने में वैध त्रुटि .... हल हो जाएगा !!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!

-3

अधिकांश समय जब ऐसा होता है तो यह SQL कॉलम में खराब डेटा होता है। यह एक छवि स्तंभ में डालने के लिए उचित तरीका है:

INSERT INTO [TableX] (ImgColumn) VALUES (
(SELECT * FROM OPENROWSET(BULK N'C:\....\Picture 010.png', SINGLE_BLOB) as tempimg)) 

अधिकांश लोगों को यह कर गलत तरीके से इस तरह से:

INSERT INTO [TableX] (ImgColumn) VALUES ('C:\....\Picture 010.png')) 
4
byte[] fileData = null; 
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream)) 
{ 
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength); 
} 
ImageConverter imageConverter = new System.Drawing.ImageConverter(); 
System.Drawing.Image image = imageConverter.ConvertFrom(fileData) as System.Drawing.Image; 
image.Save(imageFullPath, System.Drawing.Imaging.ImageFormat.Jpeg); 
+0

यह मेरे मामले में एकमात्र कामकाजी समाधान है, धन्यवाद! मुझे लोड करने के लिए कुछ प्रकार की छवियां मिली हैं और उनमें से कुछ छवि द्वारा लोड नहीं हो सका। फ्रॉमस्ट्रीम()। ImageConverter उन्हें सभी लोड कर सकता है :) –

+0

वही त्रुटि "पैरामीटर मान्य नहीं है" – dalvir

-3

बस इस का पालन करें डेटाबेस में मान प्रविष्ट करने के लिए

// कनेक्शन स्ट्रिंग

con.Open(); 

sqlQuery = "INSERT INTO [dbo].[Client] ([Client_ID],[Client_Name],[Phone],[Address],[Image]) VALUES('" + txtClientID.Text + "','" + txtClientName.Text + "','" + txtPhoneno.Text + "','" + txtaddress.Text + "',@image)"; 

       cmd = new SqlCommand(sqlQuery, con); 
       cmd.Parameters.Add("@image", SqlDbType.Image); 
       cmd.Parameters["@image"].Value = img; 
      //img is a byte object 
      ** /*MemoryStream ms = new MemoryStream(); 
      pictureBox1.Image.Save(ms,pictureBox1.Image.RawFormat); 
      byte[] img = ms.ToArray();*/** 

       cmd.ExecuteNonQuery(); 
       con.Close(); 
संबंधित मुद्दे