gpt4 book ai didi

c# - 在 LocalFolder 中存储 BitmapImage - UWP

转载 作者:太空狗 更新时间:2023-10-30 01:02:19 25 4
gpt4 key购买 nike

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

public static async Task<BitmapImage> 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 平台的任何解决方案。如何将位图保存到文件?如果使用其他扩展名会更容易,则扩展名不必是 .jpg。

最佳答案

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

public static async Task<WriteableBitmap> 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[image.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();
}
}

关于c# - 在 LocalFolder 中存储 BitmapImage - UWP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34362838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com