合并两个图像在windows通用8.1
本文关键字:windows 通用 图像 两个 合并 | 更新日期: 2023-09-27 18:13:01
我有1.png (150x150大小)和2.png (150x150大小)。我使用以下代码创建一个stackpanel (310x150大小):
StackPanel mygrid = new StackPanel();
mygrid.Orientation = Orientation.Horizontal;
Image myimage1 = new Image();
myimage1.Width = 150; myimage1.Height = 150;
myimage1.Source = new BitmapImage(new Uri(@"ms-appx:///assets/1.png", UriKind.RelativeOrAbsolute));
Image myimage2 = new Image();
myimage2.Width = 150; myimage2.Height = 150;
myimage2.Source = new BitmapImage(new Uri(@"ms-appx:///assets/2.png", UriKind.RelativeOrAbsolute));
mygrid.Children.Add(myimage1);
mygrid.Children.Add(myimage2);
然后我将这个stackpanel转换为Image:
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(mygrid, 310, 150);
我想保存这张图片在"ms-appx:///assets/3.png"(像这个名字),并使用它。通过这种方式,我将两个图像合并为一个图像,但我不能将它们保存为3.png。我该怎么做呢?
如果这不是把两张图片合并成一张图片的好方法,有没有可能帮助我?
更新:我很抱歉,但问题有问题,它被删除。我不能删掉,因为上面有答案。谢谢你的帮助。
我认为你通常使用错误的方法来做这件事。我会将这两张图像加载到WriteableBitmap
s中,然后将它们与WriteableBitmapEx库混合
话虽如此,以下是如何将WriteableBitmap
保存为png的方法,从这里开始:
// Save the writeableBitmap object to JPG Image file
IStorageFile saveFile = todo;// insert your code for opening the file here
IRandomAccessStream stream = await savefile.OpenAsync(FileAccessMode.ReadWrite);
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
// Get pixels of the WriteableBitmap object
Stream pixelStream = renderTargetBitmap.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelStream.Length];
await pixelStream.ReadAsync(pixels, 0, pixels.Length);
// Save the image file with jpg extension
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)writeableBitmap.PixelWidth, (uint)writeableBitmap.PixelHeight, 96.0, 96.0, pixels);
await encoder.FlushAsync();
您尝试将图像保存为ms-appx:///assets/3.png
,这将不起作用,因为您无法将图像保存在应用程序包中。
你需要把它保存到你的应用程序有写权限的地方