我不完全清楚你到底需要做什么。但无论如何,这里有一个WPF友好的示例,说明如何在另一个图像中的特定位置绘制图像。
注意:如果您只想以不同的大小显示图像和/或在图像周围加上黑色边框,有很多简单的方法可以做到,而不必创建第二个图像,例如只需将图像放在已经具有所需边框样式的面板中即可。
请注意,我正在使用System.Windows.Media命名空间中的类,因为这是WPF所使用的。这些类不容易与System.Drawing命名空间中的旧类混合(一些类名冲突,而且Microsoft的.NET框架缺少在这些类型之间转换对象的内置方法),因此通常需要简单地决定是使用一组还是其他一组绘图工具。我想你一直在尝试使用System.Drawing。每个人都有自己的优缺点,在这里解释起来需要很长时间。
// using System.Windows.Media;
// using System.Windows.Media.Imaging;
private void DrawTwoImages()
{
// For InputPictureBox
var file = new Uri("C:\\image.png");
var inputImage = new BitmapImage(file);
// If your image is stored in a Resource Dictionary, instead use:
// var inputImage = (BitmapImage) Resources["image.png"];
InputPicture.Source = inputImage;
// imageCopy isn't actually needed for this example.
// But since you had it in yours, here is how it's done, anyway.
var imageCopy = inputImage.Clone();
// Parameters for setting up our output picture
int leftMargin = 50;
int topMargin = 5;
int rightMargin = 50;
int bottomMargin = 5;
int width = inputImage.PixelWidth + leftMargin + rightMargin;
int height = inputImage.PixelHeight + topMargin + bottomMargin;
var backgroundColor = Brushes.Black;
var borderColor = (Pen) null;
// Use a DrawingVisual and DrawingContext for drawing
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
// Draw the black background
dc.DrawRectangle(backgroundColor, borderColor, new Rect(0, 0, width, height));
// Copy input image onto output image at desired position
dc.DrawImage(inputImage, new Rect(leftMargin, topMargin,
inputImage.PixelWidth, inputImage.PixelHeight));
}
// For displaying output image
var rtb = new RenderTargetBitmap( width, height, 96, 96, PixelFormats.Pbgra32 );
rtb.Render(dv);
OutputPicture.Source = rtb;
}