c# – 将png图像合并到WPF中的单个图像中

我正在寻找一种方法将一些PNG平铺图像合并为一个大图像.所以我搜索并找到了一些链接. This未得到正确回答. This没有平铺,它有利于覆盖图像,this没有使用WPF.所以我正在提出这个问题.

问题定义:

我有4个PNG图像.我想将它们合并为一个PNG图像,就像这样

-------------------
|        |        |
|  png1  |  png2  |
|        |        |
-------------------
|        |        |
|  png3  |  png4  |
|        |        |
-------------------

题:

这样做的最佳和有效方法是什么(结果图像必须是PNG)?

解决方法

// Loads the images to tile (no need to specify PngBitmapDecoder,the correct decoder is automatically selected)
BitmapFrame frame1 = BitmapDecoder.Create(new Uri(path1),BitmapCreateOptions.None,BitmapCacheOption.OnLoad).Frames.First();
BitmapFrame frame2 = BitmapDecoder.Create(new Uri(path2),BitmapCacheOption.OnLoad).Frames.First();
BitmapFrame frame3 = BitmapDecoder.Create(new Uri(path3),BitmapCacheOption.OnLoad).Frames.First();
BitmapFrame frame4 = BitmapDecoder.Create(new Uri(path4),BitmapCacheOption.OnLoad).Frames.First();

// Gets the size of the images (I assume each image has the same size)
int imageWidth = frame1.PixelWidth;
int imageHeight = frame1.PixelHeight;

// Draws the images into a DrawingVisual component
DrawingVisual drawingVisual = new DrawingVisual();
using (DrawingContext drawingContext = drawingVisual.Renderopen())
{
    drawingContext.DrawImage(frame1,new Rect(0,imageWidth,imageHeight));
    drawingContext.DrawImage(frame2,new Rect(imageWidth,imageHeight));
    drawingContext.DrawImage(frame3,imageHeight,imageHeight));
    drawingContext.DrawImage(frame4,imageHeight));
}

// Converts the Visual (DrawingVisual) into a BitmapSource
rendertargetBitmap bmp = new rendertargetBitmap(imageWidth * 2,imageHeight * 2,96,PixelFormats.Pbgra32);
bmp.Render(drawingVisual);

// Creates a PngBitmapEncoder and adds the BitmapSource to the frames of the encoder
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));

// Saves the image into a file using the encoder
using (Stream stream = File.Create(pathTileImage))
    encoder.Save(stream);

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...