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

前端之家收集整理的这篇文章主要介绍了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);

猜你在找的C#相关文章