wpf中Bitmap与BitmapImage是什么?
image控件显示图片:
public MainWindow()
{
InitializeComponent();
this.Background = Brushes.White;
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap("test.png");
BitmapImage bitmapImage = BitmapToBitmapImage(bitmap);
mainWindow.Source = bitmapImage;
}
private BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap)
{
BitmapImage bitmapImage = new BitmapImage();
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
bitmap.Save(ms, ImageFormat.Png);
bitmapImage.BeginInit();
bitmapImage.StreamSource = ms;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
bitmapImage.Freeze();
}
return bitmapImage;
}
在bitmapImage上作画:
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
drawingContext.DrawText(new FormattedText("欢迎访问我博客 http://lindexi.gitee.io 里面有大量 UWP WPF 博客",
CultureInfo.GetCultureInfo("zh-cn"),
FlowDirection.LeftToRight,
new Typeface("Verdana"),
36, Brushes.Black),
new System.Windows.Point(200, 116));
drawingContext.DrawImage(new BitmapImage(new Uri("C:\\Users\\Administrator\\source\\repos\\tool\\tool\\bin\\Debug\\net6.0-windows\\test.png")),new Rect(0,0,1000,1000));
drawingContext.Close();
RenderTargetBitmap bmp = new RenderTargetBitmap(1280, 1000, 96, 96, PixelFormats.Pbgra32);
bmp.Render(drawingVisual);
var bitmapImage = new BitmapImage();
var bitmapEncoder = new PngBitmapEncoder();
bitmapEncoder.Frames.Add(BitmapFrame.Create(bmp));
using (var stream = new MemoryStream())
{
bitmapEncoder.Save(stream);
stream.Seek(0, SeekOrigin.Begin);
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = stream;
bitmapImage.EndInit();
}
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
using (var fileStream = new System.IO.FileStream("66.png", System.IO.FileMode.Create))
{
encoder.Save(fileStream);
}
mainWindow.Source = bitmapImage;