如何将 BitmapImage / WriteableBitmap 保存为 png 格式(Silverlight/windows 手机)?

发布于 2024-09-16 19:32:20 字数 85 浏览 1 评论 0原文

如何使用 Windows Phone 版 Silverlight 将图像(BitmapImage / WriteableBitmap)保存为 png 格式?

How can i save an image (BitmapImage / WriteableBitmap) in png format using Silverlight for windows phone?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

莫多说 2024-09-23 19:32:20

查看 codeplex 上的 ImageTools。支持 silverlight 编码 PNG。我不确定这是否适用于 Windows Phone 7 或者可以为 Windows Phone 7 进行编译。

Take a look at ImageTools on codeplex. That supports silverlight encoding PNG. I'm not sure whether this will work with or can be compiled for windows phone 7.

梨涡 2024-09-23 19:32:20

你可以尝试下面的代码。

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

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();
}

You could try the following code.

This code worked for me. Before you try, make sure that your writablebitmap has a transparent background (You can check by assigning to a image controller image source). If not, make the background transparent from the controller it was coming from.

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();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文