3

我有位图图像:

BitmapImage image = new BitmapImage();
image.SetSource(memStream);

我想将图像保存到磁盘以供将来查看。我找不到如何做到这一点的工作示例?第二个问题。我需要获取像素的颜色(例如:)Color cl=image.GetColorPixel(X,Y),我该怎么做?谢谢!

4

5 回答 5

4

这是我前一段时间在网上找到的代码。我不确定,但如果我没记错的话,它来自 sdk 示例或 winrt 博客

这一切都归结为 WritabelBitmap 图像(就像已经发布的其他图像一样),创建一个解码器并将其推送到流中。

  /// <summary>
        /// 
        /// </summary>
        /// <param name="writeableBitmap"></param>
        /// <param name="outputFile"></param>
        /// <param name="encoderId"></param>
        /// <returns></returns>
        public static async Task SaveToFile(
            this WriteableBitmap writeableBitmap,
            IStorageFile outputFile,
            Guid encoderId)
        {
            try
            {
                Stream stream = writeableBitmap.PixelBuffer.AsStream();
                byte[] pixels = new byte[(uint)stream.Length];
                await stream.ReadAsync(pixels, 0, pixels.Length);

                using (var writeStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
                {
                    var encoder = await BitmapEncoder.CreateAsync(encoderId, writeStream);
                    encoder.SetPixelData(
                        BitmapPixelFormat.Bgra8,
                        BitmapAlphaMode.Premultiplied,
                        (uint)writeableBitmap.PixelWidth,
                        (uint)writeableBitmap.PixelHeight,
                        96,
                        96,
                        pixels);
                    await encoder.FlushAsync();

                    using (var outputStream = writeStream.GetOutputStreamAt(0))
                    {
                        await outputStream.FlushAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                string s = ex.ToString();
            }
        }
于 2013-03-20T06:50:16.103 回答
3

您可以通过以下方式保存 BitmapImage。

Windows.Storage.StorageFolder localFolder =   Windows.Storage.ApplicationData.Current.LocalFolder;
        StorageFile sampleFile = await localFolder.CreateFileAsync("image.png");
        await FileIO.WriteBytesAsync(sampleFile, bytes);

image.png 将保存在应用程序的 LocalFolder 中。

希望能帮助到你!

  • Binaya Raj Shrestha
于 2013-07-17T11:57:45.390 回答
1

您无法保存或修改BitmapImage. 您需要使用 aWriteableBitmap代替。如果你真的别无选择,只能从 BitmapImage 开始 - 检查它的UriSource属性以再次下载相同的图像或加载WriteableBitmap与开始内容相同的图像BitmapImage。请注意,UriSource在某些情况下可能为 null - 即使BitmapImage是通过给它一个 URI 来加载它 - 它可能会被手动重置或通过设置CacheModeBitmapCache使用Image给定BitmapImage作为其Source.

于 2013-03-20T06:22:12.560 回答
0

如果您试图从您的 xaml 中获取一个 ui 元素并将其保存为图像,那么您将不走运。在 wpf 中有一个可写位图上的方法,该方法将 UIelement 作为参数,但在 Windows 商店应用程序中不存在。

您可以使用 DirectX,但这是一种非常复杂的方法。商店中的大多数绘图应用程序都使用 JavaScript,因为它更容易进行保存。

于 2013-03-20T07:04:22.353 回答
0

看看这个链接。有一个片段显示了 WriteableBitmap http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.media.imaging.writeablebitmap.aspx的一些操作

这个例子是阅读,但写作应该不难。

要遍历像素,请查看 PixelData 属性。

于 2013-03-19T14:06:27.403 回答