gpt4 book ai didi

c# - 如何清除 WriteableBitmap 的内存

转载 作者:行者123 更新时间:2023-11-30 20:24:35 25 4
gpt4 key购买 nike

我正在使用 PhotoChooserTask 从图库中挑选图像,这是我的设置

private void ApplicationBarIconButton_Click(object sender, EventArgs e)
{
PhotoChooserTask photo = new PhotoChooserTask();
photo.Completed += photo_Completed;
photo.Show();
}

void photo_Completed(object sender, PhotoResult e)
{
if (e.ChosenPhoto != null)
{
WriteableBitmap wbmp1 = PictureDecoder.DecodeJpeg(e.ChoosenPhoto, (int)scrnWidth, (int)scrnHeight);
ImageBrush iBru = new ImageBrush();
iBru.ImageSource = wbmp1;
iBru.Stretch = Stretch.Fill;
ContentPanel.Background = iBru;
}
}

问题:这种方式仅适用于.JPEG 图像

为了让它与其他图像格式一起工作,我尝试了这个:

void photo_Completed(object sender, PhotoResult e)
{
if (e.ChosenPhoto != null)
{
WriteableBitmap wBmp = new WriteableBitmap(0, 0);//6930432
wBmp.SetSource(e.ChosenPhoto);//23105536
MemoryStream tmpStream = new MemoryStream();//23105536
wBmp.SaveJpeg(tmpStream, (int)scrnWidth, (int)scrnHeight, 0, 100);//22831104
tmpStream.Seek(0, SeekOrigin.Begin);//22831104

WriteableBitmap wbmp1 = PictureDecoder.DecodeJpeg(tmpStream, (int)scrnWidth, (int)scrnHeight);//24449024
ImageBrush iBru = new ImageBrush();//24449024
iBru.ImageSource = wbmp1;//24449024
iBru.Stretch = Stretch.Fill;
ContentPanel.Background = iBru;
}
}

这种方式适用于不同的图像格式,但内存效率不高。

为了更好地理解,我在每行之后提到了 bytes 的数量。

问题:在后面的代码片段中,我不再需要 wbmp,如何清除 wbmp 对象使用的内存?

最佳答案

正如@Soonts 建议的那样,我使用了 BitmapImage 并且它解决了我的目的,

BitmapImage bmp = new BitmapImage();
bmp.DecodePixelWidth = (int)scrnWidth;
bmp.DecodePixelHeight = (int)scrnHeight;
bmp.SetSource(e.ChosenPhoto);

它消耗更少的内存,我们可以scale image

关于c# - 如何清除 WriteableBitmap 的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26341861/

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