Как я связываю Массив байтов с Изображением в WPF с преобразователем значения?

Измените HTML-код генерации строки следующим образом:

for(i=0; i');
    $('').appendTo($(row)).html(data[i].name);
    $('').appendTo($(row)).html(getDot(data[i].online));
    $('').appendTo($(row)).html(getDot(data[i].offline));
    $('').appendTo($(row)).html(data[i].comment);
    $('#show').append($(row));
}

Функция для генерации DOT:

 function getDot(data){
    var div = '';
    if(data) {
      div = $('
'); if(data === 'IN') { $(div).addClass('green-dot'); } else if(data === 'OUT') { $(div).addClass('red-dot'); } } return div; }

CSS :

div.dot {
    width : 20px;
    height : 20px;
    border-radius : 50%;
}

div.green-dot{
    background-color : green;
}

div.red-dot{
    background-color : red;
}

Проверьте демонстрацию в этой скрипке .

13
задан Zack Peterson 26 March 2009 в 19:17
поделиться

4 ответа

Спасибо за всю Вашу справку. Я теперь получил его работа. Я все еще не уверен точно, какова проблема была.

Это - то, как я поместил изображения в свою базу данных …

Private Sub ButtonUpload_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    Dim FileOpenStream As Stream = Nothing
    Dim FileBox As New Microsoft.Win32.OpenFileDialog()
    FileBox.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)
    FileBox.Filter = "Pictures (*.jpg;*.jpeg;*.gif;*.png)|*.jpg;*.jpeg;*.gif;*.png|" & _
                     "All Files (*.*)|*.*"
    FileBox.FilterIndex = 1
    FileBox.Multiselect = False
    Dim FileSelected As Nullable(Of Boolean) = FileBox.ShowDialog(Me)
    If FileSelected IsNot Nothing AndAlso FileSelected.Value = True Then
        Try
            FileOpenStream = FileBox.OpenFile()
            If (FileOpenStream IsNot Nothing) Then

                Dim ByteArray As Byte()
                Using br As New BinaryReader(FileOpenStream)
                    ByteArray = br.ReadBytes(FileOpenStream.Length)
                End Using

                Dim g As New ZackGraphic
                g.Id = Guid.NewGuid
                g.ImageData = ByteArray
                g.FileSize = CInt(ByteArray.Length)
                g.FileName = FileBox.FileName.Split("\").Last
                g.FileExtension = "." + FileBox.FileName.Split(".").Last.ToLower
                g.DateAdded = Now

                Dim bmp As New BitmapImage
                bmp.BeginInit()
                bmp.StreamSource = New MemoryStream(ByteArray)
                bmp.EndInit()
                bmp.Freeze()

                g.PixelWidth = bmp.PixelWidth
                g.PixelHeight = bmp.PixelHeight

                db.AddToZackGraphic(g)
                db.SaveChanges()

            End If
        Catch Ex As Exception
            MessageBox.Show("Cannot read file from disk. " & Ex.Message, "Add a New Image", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK)
        Finally
            If (FileOpenStream IsNot Nothing) Then
                FileOpenStream.Close()
            End If
        End Try
    End If
End Sub

Это - мой преобразователь значения, используемый для привязки Массива байтов с Изображением …

Class BinaryImageConverter
    Implements IValueConverter
    Private Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
        If value IsNot Nothing AndAlso TypeOf value Is Byte() Then
            Dim ByteArray As Byte() = TryCast(value, Byte())
            Dim bmp As New BitmapImage()
            bmp.BeginInit()
            bmp.StreamSource = New MemoryStream(ByteArray)
            bmp.EndInit()
            Return bmp
        End If
        Return Nothing
    End Function
    Private Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
        Throw New Exception("The method or operation is not implemented.")
    End Function
End Class

Это - мой XAML, который использует дисплей преобразователя изображение …

<Window xmlns:local="clr-namespace:MyProjectName" ... >
    <Window.Resources>
        <local:BinaryImageConverter x:Key="imgConverter" />
    </Window.Resources>
...
<Image Source="{Binding Path=ImageData, Converter={StaticResource imgConverter}}" />
11
ответ дан 1 December 2019 в 19:02
поделиться

Попытайтесь использовать это

Dim imageSource as ImageSource
Dim bitmapDecoder = new PngBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
imageSource = bitmapDecoder.Frames[0];
imageSource.Freeze();
Return imageSource
2
ответ дан 1 December 2019 в 19:02
поделиться

Мое предположение было бы то, что байты не являются законным форматом изображения. Я полагаю, что код ошибки соответствует WINCODEC_ERR_COMPONENTNOTFOUND, который согласовывался бы с недопустимыми байтами.

В каком формате массив байтов, как предполагается, находится? Можно ли сохранить его на диск и попытаться ли открыть его с другой программой обработки изображений?

1
ответ дан 1 December 2019 в 19:02
поделиться

Я полагаю, что это - на самом деле проблема права доступа. Попытайтесь работать с правами администратора и посмотрите, работает ли это, и пойдите оттуда.

Править: Я не соглашаюсь с downvote и комментарием. Смотрите на эту ссылку:

http://social.expression.microsoft.com/Forums/en-US/wpf/thread/617f6711-0373-44cc-b72c-aeae20f0f7a8/

У этого пользователя была та же самая ошибка, и она была вызвана настройками безопасности. Поэтому я поддерживаю свой ответ (который не может быть причиной, но это, конечно, стоит попытки),

1
ответ дан 1 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: