圖片合成範例
直接看我的範例,註解裡有附說明
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
BitmapEncoder BitmapEncoder = new PngBitmapEncoder();
public MainWindow()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
//設定render圖片的寬高
int colorWidth = (int)imgIcon.Source.Width;
int colorHeight = (int)imgIcon.Source.Height;
if (imgBackground.ActualHeight >= imgIcon.ActualHeight)
{
colorHeight = (int)imgBackground.ActualHeight;
}
else
{
colorHeight = (int)imgIcon.ActualHeight;
}
if (imgBackground.ActualWidth >= imgIcon.ActualWidth)
{
colorWidth = (int)imgBackground.ActualWidth;
}
else
{
colorWidth = (int)imgIcon.ActualWidth;
}
//新增一個colorWidth*colorHeight大小的影像與背景合併區,用來將 Visual 物件轉換成點陣圖
var renderBitmap = new RenderTargetBitmap(colorWidth, colorHeight, 96.0, 96.0, PixelFormats.Pbgra32);
var dv = new DrawingVisual();//DrawingVisual 為視覺物件,可用於在螢幕上呈現向量圖形。內容由系統保存。
using (var dc = dv.RenderOpen())//開啟用於呈現的 DrawingVisual 物件。傳回的 DrawingContext 值可用來操作 DrawingVisual 中呈現。
{
//使用 Visual 繪製區域。
var backdropBrush = new VisualBrush(imgBackground);//Controls.image也是Visual物件的一種
//DrawRectangle(用來填滿矩形的筆刷,用來將矩形描邊的畫筆,要繪製的矩形);
//注意第三參數「要繪製的矩形」,其參數指定寬高如果比原始圖檔還小時,則會依個別寬高比例等比縮小,反之,則放大。
dc.DrawRectangle(backdropBrush, null, new Rect(new Point(), new Size((int)imgBackground.ActualWidth, (int)imgBackground.ActualWidth)));
var cameraBrush = new VisualBrush(imgIcon);
dc.DrawRectangle(cameraBrush, null, new Rect(new Point(), new Size(imgIcon.ActualWidth, imgIcon.ActualWidth)));
}
renderBitmap.Render(dv);//呈現 Visual 物件。
BitmapEncoder.Frames.Add(BitmapFrame.Create(renderBitmap));
Window1 Window1 = new Window1(BitmapEncoder);
Window1.Owner = (Window1)this.Owner;
Window1.Show();
Close();
}
}
}