Tôi có dưới mã XAML:Binding Image.Source vào chuỗi trong WPF?
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
WindowStartupLocation="CenterScreen"
Title="Window1" Height="300" Width="300">
<Grid>
<Image x:Name="TestImage" Source="{Binding Path=ImageSource}" />
</Grid>
</Window>
Ngoài ra, có một phương pháp mà làm cho một hình ảnh từ một chuỗi Base64
:
Image Base64StringToImage(string base64ImageString)
{
try
{
byte[] b;
b = Convert.FromBase64String(base64ImageString);
MemoryStream ms = new System.IO.MemoryStream(b);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
//////////////////////////////////////////////
//convert System.Drawing.Image to WPF image
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(img);
IntPtr hBitmap = bmp.GetHbitmap();
System.Windows.Media.ImageSource imageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
Image wpfImage = new Image();
wpfImage.Source = imageSource;
wpfImage.Width = wpfImage.Height = 16;
//////////////////////////////////////////////
return wpfImage;
}
catch
{
Image img1 = new Image();
img1.Source = new BitmapImage(new Uri(@"/passwordManager;component/images/TreeView/empty-bookmark.png", UriKind.Relative));
img1.Width = img1.Height = 16;
return img1;
}
}
Bây giờ, tôi sẽ ràng buộc TestImage
đến đầu ra của Base64StringToImage
phương pháp.
Tôi đã sử dụng cách sau:
public string ImageSource { get; set; }
ImageSource = Base64StringToImage("iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAABjUExURXK45////6fT8PX6/bTZ8onE643F7Pf7/pDH7PP5/dns+b7e9MPh9Xq86NHo947G7Hm76NTp+PL4/bHY8ojD67rc85bK7b3e9MTh9dLo97vd8/D3/Hy96Xe76Nfr+H+/6f///1bvXooAAAAhdFJOU///////////////////////////////////////////AJ/B0CEAAACHSURBVHjaXI/ZFoMgEEMzLCqg1q37Yv//KxvAlh7zMuQeyAS8d8I2z8PT/AMDShWQfCYJHL0FmlcXSQTGi7NNLSMwR2BQaXE1IfAguPFx5UQmeqwEHSfviz7w0BIMyU86khBDZ8DLfWHOGPJahe66MKe/fIupXKst1VXxW/VgT/3utz99BBgA4P0So6hyl+QAAAAASUVORK5CYIII").Source.ToString();
nhưng không có gì xảy ra.
Làm cách nào để khắc phục sự cố?
BTW, tôi chắc chắn rằng chuỗi base64 là chính xác
Không liên quan đến câu hỏi của bạn, nhưng bạn đã thử tải hình ảnh với 'var img = new BitmapImage {StreamSource = ms} '? –
@Simon: KHÔNG, tôi chưa có. nhưng, Tại sao tôi lại làm vậy? –
Vâng, bạn có thể tải hình ảnh trực tiếp với WPF, thay vì thông qua GDI + (System.Drawing). Bởi vì nó có nghĩa là để được sử dụng từ XAML, bạn thực sự phải làm 'var source = new BitmapImage(); source.BeginInit(); source.StreamSource = ms; source.EndInit() '. –