2012-04-25 3 views
0

Я пытаюсь отобразить изображение в контейнере Image 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

Вы использовали отладчик, чтобы проверить, является ли «данные» нулевым? И почему вы не используете ConvertFromString (imageContent)? – Phil

+0

imageContent содержит «System.Byte []« Я использую это, чтобы просто убедиться, что есть что-то вдаваться в данные – Noelle

ответ

1

Установить точку останова и проверки данных не является нулевым. Кроме того, почему бы вам не установить источник изображения в качестве байта [] вместо использования 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; 
} 
Смежные вопросы