WriteableBitmap或BitmapImage到C++Windows应用商店应用程序中的StorageFile

WriteableBitmap or BitmapImage to StorageFile in C++ Windows Store App

本文关键字:应用程序 StorageFile 应用 BitmapImage C++Windows WriteableBitmap      更新时间:2023-10-16

这样我就可以保存图像了吗?图像只能以这些格式找到——它不是一个文件——它只是一个BitmapImage。

我在c#中知道这种方法,有什么想法吗?

    private static async Task<StorageFile> SaveAsJpeg(WriteableBitmap wb)
{
     byte[] pixels;
     using (var stream = wb.PixelBuffer.AsStream())
     {
        pixels = new byte[(uint)stream.Length];
        await stream.ReadAsync(pixels, 0, pixels.Length);
     }
     var name = String.Format("{0}_{1:yyyy-MM-dd_HH-mm-ss}.jpg", "MyApp", DateTime.Now);
     var outputFile = await KnownFolders.PicturesLibrary.CreateFileAsync(name, CreationCollisionOption.ReplaceExisting);
     using (var writeStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
     {
        var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, writeStream);
        encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied,
                             (uint)wb.PixelWidth, (uint)wb.PixelHeight,
                             96, 96, pixels);
        await encoder.FlushAsync();
        using (var outputStream = writeStream.GetOutputStreamAt(0))
        {
           await outputStream.FlushAsync();
        }
     }
     return outputFile;

不需要成为任务,它可以是无效的,没有问题。。。

首先,如果您首先加载了BitmapImage,那么您就可以访问源文件,因此最简单的解决方案是复制源文件。至于WriteableBitmap,它与C#版本有点相似,但随着您开始使用类似COM的技术,它当然会稍微复杂一些。看看詹姆斯对我关于访问像素的问题的回答是否对你有所帮助:

如何使用C++访问WriteableBitmap.PixelBuffer像素?