我在[Image]
mytable
的{{1}}列的cs代码中有一个字符串值,类型为mydatabase
,现在想要将值设置为Image控件的来源。
我编写了这段代码,但未将图片设置为源代码:
varbinary(Max)
在构造函数中:
string strImage = "0xFFD8FFE000104A46494600010....."
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
在Xaml中:
var bytes = GetBytes(strImage);
var myImage = new MyImageModel {Content = bytes};
MyImg.DataContext = myImage;
上述代码不起作用,也不是错误。
答案 0 :(得分:0)
您可以使用converter
并将byte
字符串绑定到图片的Source
属性。 (所以内容是你的字节字符串)
<converters:BytesToImageConverter x:Key="BytesToImageConverter" />
<Image x:Name="MyImg" Source="{Binding Path=Content, Converter={StaticResource BytesToImageConverter}}"/>
转换器代码:
public class BytesToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return null;
if (!(value is byte[]))
throw new ArgumentException("Only byte[] values are supported.");
if (((byte[])value).Length == 0)
return null;
// return new ImageSourceConverter().ConvertFrom(value);
BitmapImage image = new BitmapImage();
using (MemoryStream ms = new MemoryStream((byte[])value))
{
ms.Position = 0;
image.BeginInit();
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = null;
image.StreamSource = ms;
image.EndInit();
}
image.Freeze();
return image;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
}
答案 1 :(得分:-1)
将字符串代码转换为图像文件使用转换像这样
public BitmapImage Base64ToImage( byte[] byteArray)
{
byteArray; // your bytes
BitmapImage img = new BitmapImage();
using (MemoryStream stream = new MemoryStream(byteArray))
{
img.BeginInit();
img.StreamSource = stream;
img.CacheOption = BitmapCacheOption.OnLoad;
img.EndInit();
img.Freeze();
}
return img;
}
它会为您提供一个可以直接将此图像绑定到UI的图像