问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

System.Drawing.Bitmap要如何轉換成WPF中可用的ImageSource呢?

发布网友 发布时间:2022-05-06 07:38

我来回答

1个回答

热心网友 时间:2022-06-29 01:00

img1.Source = new BitmapImage(new Uri(@"image file path", UriKind.RelativeOrAbsolute)); 利用這樣的方式,將圖片檔案顯示在Imagez上面;如果來源是byte array的話,會利用類似這樣的方式
System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); fs.Close(); fs.Dispose(); System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = ms; bitmapImage.EndInit(); img1.Source = bitmapImage; 這樣就可以由byte陣列轉換成WPF中可以使用的圖片來源了,不過上面這段程式碼有個問題需要處理,在memoryStream的部分,上面並沒有看到Dispose的部分,這樣子不會產生一些記憶體耗用的狀況嗎?於是嘗試加上了MemortStream.Dispose的部分之後發現『疑?阿圖片怎麼顯示不出來了』,這個部分請參考一下
Convert memory stream to BitmapImage? 必須要指定CacheOption的屬性,強制在載入的時候去讀取,才會確保顯示的正常;不然如果需要載入的時候,memorystream已經被釋放掉了,就會造成上面說的圖片無法顯示的狀況了。稍加修改之後,程式碼會像是這樣
System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); fs.Close(); fs.Dispose(); System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = ms; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); ms.Dispose(); img1.Source = bitmapImage; 好,看完了一般情況的使用之後,來看一下System.Drawing.Bitmap的部分;會甚麼會有這個需求呢?假設今天你呼叫的是第三方廠商提供的dll,dll回傳的就已經是System.Drawing.Bitmap的話,就會遇到需要轉換的狀況了。那麼應該怎麼轉換呢?下面列出兩種方式作為參考

[System.Runtime.InteropServices.DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); private BitmapSource BitmapToBitmapSource(System.Drawing.Bitmap bitmap) { IntPtr ptr = bitmap.GetHbitmap(); BitmapSource result = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( ptr, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); //release resource DeleteObject(ptr); return result; } 這邊要請特別注意一下,在最後一定要呼叫DeleteObject來做資源的釋放(可以參考MSDN的這篇文章),不然記憶體是會越吃越兇的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
奥迪a6l怎么用手机连接音响放歌,我的是华为 奥迪a6l蓝牙连接了,听歌没声音 2009年6月在农业银行办理30万等额本息为10年的商业房贷,7折,现在月供... 存量房贷七折七折政策 ...在农业银行贷款27万,等额本息打七折利率按揭20年,现在的利率每月应还... 我是第一套房,在农业银行不是公积金贷款27万元20年付清利息怎么算法... 在成都交通违章网上怎么办理的 成都违章罚款网上怎么交 成都交通违章罚款在哪里交 成都违章停车可以网上交罚款吗 wpf从数据库读取图片显示到image控件上去问题??? C# BitmapImage释放资源 WPF中 通过socket 接收到的 JPG 二进制流如何转成 Image.Source wpf 中images控件binding显示图片后,图片文件会一直被占用吗?如果是该怎么解 WPF中,如何点击一个被image覆盖住的控件。 C# WPF BitmapImage 怎样转换到 winfrom下的Bitmap类型呢? 汪曣的科研项目 生物医学求推荐入门书籍 石应康的学术任职 生物医学工程学杂志版面费是多少 生物医学工程类中文核心期刊有哪些 生物医学工程学杂志退稿了还能再投吗 生物医学工程学杂志是什么等级杂志? 生物医学工程学杂志j bi omed eng是sci吗 有图片可以介绍轮胎结构吗?轮毂 轮辋 等等的搞混了 生物医学工程 哪本杂志最具权威性 汽车的轮胎轮毂材质有区别嘛? 我是生物医学工程的学生,一直苦苦寻觅着本行业的相关杂志,至今尚未找到满意的杂志,跪求有识之士推荐。 奔驰s400的原装轮胎包括轮毂可以装在奥迪a4l上么?各是什么型号的? 轮毂和钢圈有什么区别? 微信无法登陆百度账号怎么办? WPF 封装 图片resource的问题 c# wpf 从sql server 读取图片 以生产资料形式存在的资本属于什么 什么是不变资本,什么是可变资本,其划分依据和意义是什么 进别人微信的朋友圈会被看到吗 泰迪犬老是呕吐怎么办? 两个月泰迪吃完为什么会吐? 小泰迪老是吐,吃什么吐什么 泰迪成犬吃了光吐是怎么了 泰迪吃完饭就吐狗粮是怎么回事 小泰迪狗狗吃多了吃吐了该怎么办呢 2个月的泰迪犬把昨晚吃的东西都吐了,是怎么回事? 分体式集成灶火力不平衡,一边大一边小是什么原因引起的? 北京市通州区公立幼儿园招聘保育员有户口限制吗?我想报考保育员证,非京... 在南京江宁这边考保育员证如何报名、大概多少钱、学历有限制吗。 在芜湖,想做公立幼儿园的保育员有年龄限制吗? 16岁女有保育员证可以当幼师吗 我54岁可以去做保育员吗还可以交五险一金吗? 祝福新婚快乐的诗句