Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法强制转换类型为';System.Data.Linq.Binary';输入';字节[]和#x27;_C#_Wpf_Visual Studio 2010 - Fatal编程技术网

C# 无法强制转换类型为';System.Data.Linq.Binary';输入';字节[]和#x27;

C# 无法强制转换类型为';System.Data.Linq.Binary';输入';字节[]和#x27;,c#,wpf,visual-studio-2010,C#,Wpf,Visual Studio 2010,在visual studio中接收到错误“无法将System.Data.Linq.Binary类型的对象强制转换为System.Byte[]”类型。我将图像存储在sql server db中,并以treeview格式显示。我可以打开dbml设计器,将所有System.Data.Linq.Binary更改为System.Byte,但图像模糊。有什么想法吗 代码如下: public class ImageBytesConverter : IValueConverter { public ob

在visual studio中接收到错误“无法将System.Data.Linq.Binary类型的对象强制转换为System.Byte[]”类型。我将图像存储在sql server db中,并以treeview格式显示。我可以打开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;
    }
}

使用
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;
    }
}

您必须使用
Binary
中的
ToArray
方法来获取
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;
    }
}

发布一些代码可能会让我们有所帮助。错误的图标大小可能会导致图标模糊。这应该是一个明显的修复,我添加了它。