2013-07-16 21 views
11

Tôi đang chuyển đổi byte vào một hình ảnh nhưng tôi nhận được một lỗiLỗi "Parameter là không hợp lệ" trong khi chuyển đổi Bytes vào ảnh

Parameter là không hợp lệ

Tôi dán mã của tôi. Vui lòng kiểm tra mã và đề xuất rằng tôi đang làm đúng hoặc sai.

Image arr1 = byteArrayToImage(Bytess); 

Đây là chức năng.

public static Image byteArrayToImage(byte[] byteArrayIn) 
{ 
     if (null == byteArrayIn || byteArrayIn.Length == 0) 
      return null; 

     MemoryStream ms = new MemoryStream(byteArrayIn); 
     try 
      { 
      Process currentProcess1 = Process.GetCurrentProcess(); 
      Image returnImage = Image.FromStream(ms); 
      return returnImage; 
      } 
     catch (Exception ex) 
      { 
      MessageBox.Show(ex.Message); 
      } 
    } 

tôi áp dụng nhiều kỹ thuật và giải pháp nhưng nó không làm việc cho tôi

câu trả lời của bạn sẽ được đánh giá cao.

Cảm ơn

+0

Tôi đã chỉnh sửa. oOption.SelectedFile có một byte –

+1

Tôi thấy rằng ... đã xóa nhận xét ban đầu của tôi ... Vì vậy, những gì dòng ném lỗi chính xác? Ngoài ra, hiện tạiProcess1 không xuất hiện để được sử dụng cho bất cứ điều gì (như là một lưu ý phụ). –

+0

Hình ảnh returnImage = Image.FromStream (ms); dòng này đưa ra một lỗi rằng paramter không hợp lệ –

Trả lời

8

thử này

public Image byteArrayToImage(byte[] byteArrayIn) 
    { 

     System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter(); 
     Image img = (Image)converter.ConvertFrom(byteArrayIn); 

     return img; 
    } 
+0

Không, nó không hoạt động. byte của tôi là 1120135 –

+0

Vui lòng cung cấp mảng byte của bạn .. –

+0

như byte [] mảng này = \t { \t 68, \t 111, \t 116, \t 32, \t 78, \t 101, \t 116, \t 32, \t 80, \t 101 , \t 114, \t 108, \t}; –

0

thử này,

public Image byteArrayToImage(byte[] byteArrayIn) 
{ 
    Image returnImage = null; 
    using (MemoryStream ms = new MemoryStream(byteArrayIn))  
    { 
     returnImage = Image.FromStream(ms);  
    } 
    return returnImage; 
} 
+0

Mohan, lỗi tương tự –

+0

Hi Umair , Tôi nghĩ giá trị byte [] của bạn không đúng định dạng. làm một suy nghĩ, để kiểm tra có một hình ảnh chuyển đổi sang byte [] sau đó vượt qua giá trị byte này để mã hóa ở trên. Nếu nó chuyển đổi hình ảnh chính xác có nghĩa là vấn đề trong giá trị byte của bạn. Chúng ta hãy biết .. –

+0

có cùng một vấn đề khi tải xuống một hình ảnh từ S3. Tuy nhiên, khi sử dụng tệp trước khi tải lên (sau khi được gửi bằng biểu mẫu), tệp sẽ hoạt động mà không có sự cố. Vẫn không thể tìm ra điều này –

2

Sau khi thử nhiều điều tôi tìm thấy một cách có kiểm soát nhiều hơn một chút. Trong ví dụ này, bạn có thể chỉ định định dạng pixel và sao chép các byte vào một Bitmap.

byte[] buffer = GetImageBytes(); 
var bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb); 
var bitmap_data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); 
Marshal.Copy(buffer, 0, bitmap_data.Scan0, buffer.Length); 
bitmap.UnlockBits(bitmap_data); 
var result = bitmap as Image; 
0
  cmd.CommandText="SELECT * FROM `form_backimg` WHERE ACTIVE=1"; 

      MySqlDataReader reader6= cmd.ExecuteReader(); 

      if(reader6.Read()) 
      { 
       code4 = (byte[])reader6["BACK_IMG"]; //BLOB FIELD NAME BACK_IMG 
      } 
      reader6.Close(); 

      MemoryStream stream = new MemoryStream(code4); //code4 is a public byte[] defined on top        
      pictureBox3.Image = Image.FromStream(stream); 
0

Vấn đề là vì, bạn đang đưa nó sai từ cơ sở dữ liệu. Hãy thử thay đổi mã của bạn như sau:

while (registry.Read()) 
{ 
    byte[] image = (byte[])registry["Image"]; 
} 
0

Trong trường hợp của tôi, tôi đã gặp lỗi do chuỗi base64 của tôi có mã hóa sai trước khi gọi Image.FromStream. Điều này làm việc cho tôi cuối cùng:

byte[] bytes = System.Convert.FromBase64String(base64ImageString); 

using (MemoryStream ms = new MemoryStream(bytes)) 
{ 
    var image = Image.FromStream(ms); 
    image.Save(filePath, System.Drawing.Imaging.ImageFormat.Png); 
} 
Các vấn đề liên quan