WPF(图像转换)
在Winform中图片大多数都是 System.Drawing.Bitmap,而在WPF中图像大多都是以System.Windows.Media.Imaging.BitmapFrame 或者 System.Windows.Media.Imaging.BitmapImage存在(其实是以System.Windows.Media.Imaging.BitmapFrameDecode存在,但是不能获取到该对象)。这两者之间的转换都是将图像转换为流,再将流转换为对应的图像。
System.Windows.Media.Imaging.BitmapSource 转换为 System.Drawing.Bitmap
<Window x:Class="WpfAppPointLine.Window1" Title="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfAppPointLine" Width="800" Height="450" mc:Ignorable="d">
<Grid >
<Button Content="66" Width="100" Height="100" Click="Button_Click">
<Button.Background>
<ImageBrush ImageSource="qing.png"/>
</Button.Background>
</Button>
</Grid>
</Window>
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
ImageBrush imageBrush = (ImageBrush)btn.Background;
BitmapSource bitmapSource = (BitmapSource)imageBrush.ImageSource;
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
{
encoder.Save(stream);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream);
bitmap.Save("fff.png");
}
}
System.Drawing.Bitmap 转换为 System.Windows.Media.Imaging.BitmapImage
System.IO.MemoryStream stream1 = new System.IO.MemoryStream();
BitmapImage bitmapImg = new BitmapImage();
bitmapImg.BeginInit();
bitmap.Save(stream1, System.Drawing.Imaging.ImageFormat.Png);
bitmapImg.StreamSource = stream1;
bitmapImg.EndInit();
bitmapImg.Freeze();
this.Background = new ImageBrush(bitmapImg);