当前位置:  开发笔记 > 编程语言 > 正文

在LocalFolder中存储BitmapImage - UWP

如何解决《在LocalFolder中存储BitmapImage-UWP》经验,为你挑选了1个好方法。

我正在尝试使用UWP上的C#将BitmapImage存储到文件系统.图像使用图形api从Facebook下载并作为BitmapImage返回.该部分工作,并检索图像(一旦我可以存储它,测试刚刚放在本地文件夹中的图片)我正在使用以下代码:

public static async Task GetProfilePicture(string userId){
    BitmapImage profilePicture = new BitmapImage(); 

    StorageFolder pictureFolder = await
                  ApplicationData.Current.LocalFolder.GetFolderAsync("ProfilePictures");
    StorageFile pictureFile = await pictureFolder.GetFileAsync(userId + ".jpg");
    IRandomAccessStream stream = await pictureFile.OpenAsync(FileAccessMode.Read);
    profilePicture.SetSource(stream);

    return profilePicture;   

这也有效,所以我想要的只是做相反的事情.首选结果如下:

public static async void SaveBitmapToFile(BitmapImage  image, userId){
    StorageFolder pictureFolder = await
        ApplicationData.Current.LocalFolder.CreateFolderAsync(
            "ProfilePictures",CreationCollisionOption.OpenIfExists);

       //save bitmap to pictureFolder with name userId.jpg

}

我一直在寻找解决方案,但我似乎无法找到任何UWP平台.如何将Bitmap保存到文件?如果更容易使用其他扩展名,则扩展名不必是.jpg.



1> Igor Ralic..:

如果使用WriteableBitmap会更容易.例如,第一种方法是:

public static async Task GetProfilePictureAsync(string userId)
{
    StorageFolder pictureFolder = await ApplicationData.Current.LocalFolder.GetFolderAsync("ProfilePictures");
    StorageFile pictureFile = await pictureFolder.GetFileAsync(userId + ".jpg");

    using (IRandomAccessStream stream = await pictureFile .OpenAsync(FileAccessMode.Read))
    {
        BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
        WriteableBitmap bmp = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);

        await bmp.SetSourceAsync(stream);

        return bmp;
    }
}

然后你可以这样做:

public static async Task SaveBitmapToFileAsync(WriteableBitmap image, userId)
{
    StorageFolder pictureFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("ProfilePictures",CreationCollisionOption.OpenIfExists);
    var file = await pictureFolder.CreateFileAsync(userId + ".jpg", CreationCollisionOption.ReplaceExisting);

    using (var stream = await file.OpenStreamForWriteAsync())
    {
        BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream.AsRandomAccessStream());
        var pixelStream = image.PixelBuffer.AsStream();
        byte[] pixels = new byte[bmp.PixelBuffer.Length];

        await pixelStream.ReadAsync(pixels, 0, pixels.Length);

        encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)image.PixelWidth, (uint)image.PixelHeight, 96, 96, pixels);

        await encoder.FlushAsync();
    }
}


向下投票,因为问题是关于保存BitmapImage.
这不是一个正确的答案,我需要的是将位图图像转换为存储文件
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有