关于WPF中Image控件不释放内存的问题 80

我最初目的是想在wpf中播放带有透明通道的视频,但MediaElement控件不支持透明通道视频播放(依然是黑色背景),测试Image控件是能够播放带透明通道PNG图片的... 我最初目的是想在wpf中播放带有透明通道的视频,但MediaElement控件不支持透明通道视频播放(依然是黑色背景),测试Image控件是能够播放带透明通道PNG图片的,故采用image控件不停加载PNG序列帧图片的方式来实现播放透明背景的视频。
程序已经写好,测试成功且效果不错,只是内存占用率让人无法接受。400张序列帧图片,所有图片加起来总大小170M,程序运行以后内存使用超过2G!实现方法是先把图存放在一个BitmapImage对象数组中,然后依次给image的.Source赋值。关键代码如下:(使用语言无所谓,C# or vb.net)
dim bmp() As BitmapImage
dim ImageRQ As New Image
dim img As ImageSource
(1)把图片弄到内存里
ReDim bmp(PngMaxName - PngMinName + 1)
For i = PngMinName To PngMaxName
bmp(i) = New BitmapImage(New Uri(PngPath + QM + Trim(Str(i)) + ".jpg", UriKind.RelativeOrAbsolute))
Next i
经过测试以后保存图片部分并不占用更多的内存,占用的只是原图片大小的内存。
(2)用image依次显示这些图
Private Sub Timer1_Tick() Handles Timer1.Tick 时钟频率每秒播30张图
aaa= aaa + 1
img = (bmp(aaa))
ImageRQ.Source = img
End Sub
经测试
ImageRQ.Source = img一句没有加之前内存均正常。只要一显示,随着播放过程的推移内存使用率逐渐增大,直到内存使用率98%
疑点:只有一个image对象,当 ImageRQ.Source = img有新值的时候应该释放掉前一个图片的显示内存,但实际并非如此。

以上问题求解
展开
 我来答
yinhen2645
2015-03-17
知道答主
回答量:7
采纳率:0%
帮助的人:1万
展开全部
由于Image.Source切换BitmapImage后,仍然抓着旧的bmImg不放,导致内存溢出.再多的内存也不够用.
先把图片缓存成二进制,这样可以释放对图片文件资源的占用,后面代码执行效率高;用通过MemoryStream生成的Source,用完就被释放了。
参考以下代码:

byte[] FacePicture = BitmapImageToByteArray(img)//图片转成数组的方法网上有很多,自己找下吧。
ImageSourceConverter imageSourceConverter = new ImageSourceConverter();

MemoryStream stream = new MemoryStream(FacePicture);
BitmapFrame source = imageSourceConverter.ConvertFrom(stream) as BitmapFrame;
bitmap.Dispose();
ImageRQ.Source = source;
多张图片,自己做个循环吧!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-09
展开全部
我怀疑是电脑处理速度不够,在那么短时间内没能及时回收。
我刚才试了,10150张图片不卡,不阻塞。我得是台式i5,显卡也可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
birdbrother
2013-08-16 · 超过12用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:30.9万
展开全部
XP系统回收比较慢,win7就好很多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zechac
2013-08-15 · TA获得超过161个赞
知道答主
回答量:84
采纳率:0%
帮助的人:55.4万
展开全部
在结束后调用GC.Collect()试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式