【问题标题】:How do I save WriteableBitmap as png image with transparency如何将 WriteableBitmap 保存为具有透明度的 png 图像
【发布时间】:2013-04-15 17:38:07
【问题描述】:

我从头像中裁剪出圆形区域。我需要获取图像的像素字节 [] 并以 base64 格式上传到服务器。不幸的是,方法 SaveJpeg() 不支持所选圆圈之外的透明度像素。我尝试了 ImageTools 库,但除了 WindowsPhone 之外没有其他平台无法从生成的字节 [] 创建 png 图像。有没有办法做到这一点?

【问题讨论】:

标签: c# save png windows-phone


【解决方案1】:

没有平台 API 可以做到这一点。 ToolStack PNG 库提供了一个轻量级的解决方案。

http://toolstack.com/libraries/pngwriter

【讨论】:

  • 谢谢,这正是我需要的
【解决方案2】:

这段代码对我有用。在您尝试之前,请确保您的可写位图具有透明背景(您可以通过分配给图像控制器图像源来检查)。如果不是,请使背景从它来自的控制器变得透明。

var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
var file = await localFolder.CreateFileAsync("temp.png", CreationCollisionOption.ReplaceExisting);
using (var ras = await file.OpenAsync(FileAccessMode.ReadWrite, StorageOpenOptions.None))
{
     WriteableBitmap bitmap = imageSource;
     var stream = bitmap.PixelBuffer.AsStream();
     byte[] buffer = new byte[stream.Length];
     await stream.ReadAsync(buffer, 0, buffer.Length);
     BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ras);
     encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96.0, 96.0, buffer);
     await encoder.FlushAsync();
}

看看吧!

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 2014-10-05
    • 2012-01-29
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2021-12-06
    • 2010-09-07
    相关资源
    最近更新 更多