WPF

2012-04-25 2 views
0

내가 WPF 이미지 컨테이너에 이미지를 표시하려고의 이미지 컨테이너에 이미지를 표시WPF

string imageContent = ((DataRowView)dgQuestions.SelectedItem)["QuestionImage"].ToString(); 
if (imageContent.Length >= 5) 
{ 
    byte[] data = (byte[])((DataRowView)dgQuestions.SelectedItem)["QuestionImage"]; 
    ImageSourceConverter imgConv = new ImageSourceConverter(); 
    imageSource = (ImageSource)imgConv.ConvertFromString(data.ToString()); 
} 

위의 코드의 마지막 줄은 다음과 같은 오류를

객체 참조를 생성 객체의 인스턴스로 설정되지 않음

사용자가 볼 수 없으므로 데이터 그리드가 이미지를 표시하는 방법에 신경 쓰지 않습니다.

이 내가 그리드를 작성하고 방법입니다

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = Con; 
cmd.CommandText = "getQuizQuestions"; 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add(new SqlParameter("@quizid", SqlDbType.Int)).Value = quizId; 
cmd.ExecuteNonQuery(); 
SqlDataAdapter daSubject = new SqlDataAdapter(cmd); 
DataSet dsSubject = new DataSet(); 
daSubject.Fill(dsSubject, "QuizSubject"); 
dgQuestions.ItemsSource = dsSubject.Tables[0].DefaultView; 
+0

'데이터'가 null인지 확인하기 위해 디버거를 사용 했습니까? ConvertFromString (imageContent)을 사용하지 않는 이유는 무엇입니까? – Phil

+0

imageContent에는 "System.Byte []"가 포함되어 있습니다. 데이터를 가져올 항목이 있는지 확인하기 위해 사용하고 있습니다. – Noelle

답변

1

중단 점을 설정하고 데이터의 유효성을 검사하는 널 (null)이 아닙니다. 또한, ToString()을 사용하는 대신 이미지 소스를 바이트 []로 설정하지 마십시오 :

public BitmapImage ImageFromBuffer(Byte[] bytes) 
{ 
    MemoryStream stream = new MemoryStream(bytes); 
    BitmapImage image = new BitmapImage(); 
    image.BeginInit(); 
    image.StreamSource = stream; 
    image.EndInit(); 
    return image; 
} 

public Byte[] BufferFromImage(BitmapImage imageSource) 
{ 
    Stream stream = imageSource.StreamSource; 
    Byte[] buffer = null; 
    if (stream != null && stream.Length > 0) 
    { 
     using (BinaryReader br = new BinaryReader(stream)) 
     { 
      buffer = br.ReadBytes((Int32)stream.Length); 
     } 
    } 

    return buffer; 
}