1

エラー'タイプ'System.Data.Linq.Binary'のオブジェクトをタイプ'System.Byte[]'にキャストできません。VisualStudioで。ツリービュー形式で表示しているSQLサーバーデータベースに画像が保存されています。dbmlデザイナーを開いて、すべてのSystem.Data.Linq.BinaryをSystem.Byteに変更できますが、画像がぼやけてぼやけて表示されます。何かご意見は?

コードは次のとおりです。

public class ImageBytesConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        BitmapImage bitmap = new BitmapImage();

        if (value != null)
        {
            byte[] photo = (byte[])value;
            MemoryStream stream = new MemoryStream();


            int offset = 78;
            stream.Write(photo, offset, photo.Length - offset);

            bitmap.BeginInit();
            bitmap.StreamSource = stream;
            bitmap.EndInit();
        }

        return bitmap;
    }
}
4

2 に答える 2

2

ToArrayメソッド fromを使用して値Binaryを取得する必要がありbyte[]ます。

public class BinaryToByteArrayConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null && value is System.Data.Linq.Binary)
        {
            byte[] array = (value as System.Data.Linq.Binary).ToArray();
            BitmapImage bitmap = new BitmapImage();

            using (MemoryStream stream = new MemoryStream())
            {
                int offset = 78;
                stream.Write(array, offset, array.Length - offset);
                bitmap.BeginInit();
                bitmap.StreamSource = stream;
                bitmap.EndInit();
            }
            return bitmap;
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}
于 2013-02-24T23:46:44.327 に答える
1

使用するSystem.Data.Linq.Binary.ToArray()

バイトの変換によるぼやけやぼやけはほとんどありませんが、表示に使用しているコントロールがピクセルグリッドに整列していないか、わずかにサイズ変更されているため、画像が引き伸ばされ、拡大されてぼやけています. 画像が引き伸ばされていないことと、コントロールがピクセル グリッドに合わせて配置されていることを確認します。SnapsToDevicePixels="True"

また、コードのヘルプは次のとおりです。

public class ImageBytesConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        BitmapImage bitmap = new BitmapImage();
        bitmap.CacheOption = BitmapCacheOption.OnLoad;

        if (value != null)
        {
            byte[] photo = ((System.Data.Linq.Binary)value).ToArray();

            using(MemoryStream stream = new MemoryStream())
            {
                int offset = 78;
                stream.Write(photo, offset, photo.Length - offset);

                bitmap.BeginInit();
                bitmap.StreamSource = stream;
                bitmap.EndInit();
            }

            return bitmap;
        }

        return null;
    }
}
于 2013-02-24T23:37:19.813 に答える