我在Windows 8.1应用程序中编写了一个代码来裁剪图片并使用教程保存它
http://code.msdn.microsoft.com/windowsapps/CSWin8AppCropBitmap-52fa1ad7
现在我要编辑图片中添加椭圆形状的图片。为此,我创建了一个椭圆
var Circle = new Ellipse
{
Height = 50,
Width = 50,
Fill = brush,
RenderTransform = new CompositeTransform(),
};
并将其添加到画布中,其中包含从计算机加载的上述图片:
imageCanvas.Children.Add(Circle);
我可以看到椭圆加载在原始图片中,但保存时,只保存原始图片(不是椭圆)。我想编辑将椭圆嵌入原始图片的图片。我该怎么办?
答案 0 :(得分:2)
我认为您正在保存图像,这就是为什么只保存图像而不保存图像上的圆圈。要用圆圈保存编辑过的图像,您需要保存CANVAS的孩子
假设您熟悉IRandomAccesStream和Encoder类,我在这里给出了我的代码,我有时会使用它的代码100%。在代码中,我还提供了FileSavePicker的功能,用户可以通过它将图片保存在所需的位置。在这里,can是画布的名称
private async void save_Click(object sender, RoutedEventArgs e)
{
if (can != null)
{
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(can);
FileSavePicker picker = new FileSavePicker();
picker.FileTypeChoices.Add("PNG Image",new string[]{".png"});
StorageFile file = await picker.PickSaveFileAsync();
if (file != null)
{
var pixels = await renderTargetBitmap.GetPixelsAsync();
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
byte[] bytes = pixels.ToArray();
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)can.Width, (uint)can.Height, 96, 96, bytes);
await encoder.FlushAsync();
}
}
}
}