2013-01-15 3 views
0

MySQL 데이터베이스에 저장된 그림을 표시하는 데 문제가 있습니다. 을 성공적으로 저장하지만 여기, 블롭 파일로 이미지 변환이 기능을 사용하는 기능입니다 경우 모르겠어요 :BLOB를 이미지로 변환하는 방법

private byte[] imageToByteArray(Image imageIn) 
{ 
    MemoryStream ms = new MemoryStream(); 
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
    return ms.ToArray(); 
} 

내 데이터베이스를 검사 할 때, 그것은 파란색 강조 BLOB는 말한다. 자, 내 picturebox에 이미지를 표시하고 싶습니다. 매개 변수가 유효

I없는,

경우 ArgumentException이 unheld했다 : 나는 또한 응용 프로그램을 실행할 때, 그것이 말하는

private Image byteArrayToImage(byte[] byteArrayIn) 
{ 
    MemoryStream ms = new MemoryStream(byteArrayIn); 
    ms.Position = 0; 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 

이미지 바이트 배열을 변환하는 기능을 ..을 이 구문을 사용해 보았습니다.

pictureBox1.Image = byteArrayToImage(dr["img"] as byte[]); 

아니면 전환해야하는지 생각하고 있습니다. t BLOB에서 바이트 배열로 먼저? 그런 다음이 함수를 사용하여 바이트 배열을 Image? 그런
내가 이름을 클릭하면, 그것은 불행하게도, 내가 인수 예외를 수신하고있어, 정보를 표시합니다 ..

int i = dataGridView1.SelectedCells[0].RowIndex; 
string firstname = dataGridView1.Rows[i].Cells[0].Value.ToString(); 
string lastname = dataGridView1.Rows[i].Cells[1].Value.ToString(); 

Connection connect = new Connection(); 
MySqlConnection mySqlConnect = new MySqlConnection(connect.connString()); 
mySqlConnect.Open(); 

string s = "SELECT * FROM tbl_contacts WHERE username = '" + label1.Text + "' and (fname = '" + firstname + "' and lname = '" + lastname + "')"; 

MySqlCommand mySQL = new MySqlCommand(s, mySqlConnect); 
mySQL.ExecuteNonQuery(); 
MySqlDataReader dr = mySQL.ExecuteReader(); 

if (dr.HasRows) 
{ 
    dr.Read(); 
    txtFname.Text = dr["fname"].ToString(); 
    txtLname.Text = dr["lname"].ToString(); 
    txtBday.Text = dr["birthday"].ToString(); 
    txtEmail.Text = dr["email"].ToString(); 
    txtMobile.Text = dr["mobile"].ToString(); 
    txtAddress.Text = dr["address"].ToString(); 
    txtNotes.Text = dr["notes"].ToString(); 
    pictureBox1.Image = byteArrayToImage(dr["img"] as byte[]); 
} 
+0

코드의 첫 번째 또는 두 번째 비트에서 ArguementException이 던져지는 위치는 어디입니까? 또한 데이터베이스에서 데이터를 어떻게 검색하고 있습니까? – Nashibukasan

+2

디버거에서 실행하면 ArgumentException을 검사하는 옵션이 제공됩니다. 이것은 a) 유효하지 않은 인수의 * name *과 b) 던져지는 * shere *를 보여주는 스택 추적을 제공해야합니다. 이러한 정보 중 하나 또는 둘 모두를 알지 못하면 며칠 동안 추측 할 수 있습니다. –

+0

''dr [ "img"] .GetType()'이 반환하는 것을 알 수 있습니까? –

답변

0

시도 뭔가 :

byteArrayToImage(dr.GetSqlBytes(dr.GetOrdinal("img")).Buffer); 
0

ArgumentException was unheld, Parameter is not valid 손상된 이미지 때문이다 . 이미지가 올바르게 저장되지 않았습니다. 디스크의 일부 파일에서받은 byte[]을 저장하고 .jpg 또는 .png이라는 이름으로 바꾸고 열어보십시오.

이진 데이터의 손상은 여러 가지 이유로 인해 발생합니다. Length 개의 이진 데이터가 저장되거나 트리밍되지 않았습니다. 데이터베이스가 5kb을 저장하도록 구성된 경우 예외를 발생시키는 대신 5kb으로 데이터를 자르는 코드를 작성했거나 추가 버퍼가 올바르게 코딩되지 않아 마지막 몇 바이트가 누락되었습니다.

관련 문제