台灣最大程式設計社群網站
線上人數
982
 
會員總數:242929
討論主題:187836
歡迎您免費加入會員
討論區列表 >> C# >> Bitmap 記憶體不足
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Bitmap 記憶體不足
價值 : 120 QP  點閱數:5783 回應數:20

樓主

Derrick
門外漢
0 20
340 30
發送站內信

想請問大家有遇過載入圖片而造成記憶體不足的問題嗎?

因為最近寫了一個程式

程式藉由載入或是掃描接受到影像後

將影像new成一個bitmap

因為需求關係

載入的影像可能會是高達1200dpi/9600*12000/109M的影像

目前寫法是一張圖會被new3~4個bitmap出來

在一些系統的限制下,可能這樣就會導致記憶體不足

是有想過縮圖來看,但是希望是能以不縮圖為主

因為想說縮圖後,後續的動作的架構就會有大幅更動

所以想來這請問看看是否有遇過類似的問題





搜尋相關Tags的文章: [ bitmap ] , [ 記憶體不足 ] ,
本篇文章發表於2012-02-24 09:44
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

mark shu
捐贈 VP 給 Mark Shu 檢舉此回應
同一圖片 為何要一張圖會被new3~4個bitmap出來
本篇文章回覆於2012-02-24 09:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Derrick
檢舉此回應
因為後面還會繼續做處理
一個是要保存原始圖的bitmap
一個是要進行剪裁用的bitmap
一個是旋轉用的bitmap

所以一開始會有保存原始圖和進行剪裁要呈現在UI上的影像

至於旋轉則是旋轉時才會用到!!
本篇文章回覆於2012-02-24 10:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

香帥
檢舉此回應
109M及new 3,4個照理說還不會記億體不夠
只是怕您 new 之後,舊圖不用了,忘了釋放物件
新圖又一直進來,那當然會記億體不夠
因此請檢查您是否有釋放物件記億體
本篇文章回覆於2012-02-24 10:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Derrick
檢舉此回應
釋放物件記憶體有做了

可是依舊還是會記憶體不足

因為各個Bitmap 都會有一個Graphic

所以基本起跳是6~8個

本篇文章回覆於2012-02-24 10:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

Derrick
檢舉此回應
加RAM是沒辦法解決問題的吧....
我們主機配備i7的CPU + 8G的RAM
依舊是會有記憶體不足的問題

本篇文章回覆於2012-02-24 12:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

Bill
檢舉此回應
類似作業系統的作法. 不是在Concurrent 操作的部份先暫存到硬碟去.
本篇文章回覆於2012-02-24 12:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

香帥
檢舉此回應
#4
釋放物件記憶體有做了
可是依舊還是會記憶體不足
可否秀出程式碼,大家幫您抓出問題點更容易,不然都是在用猜的.
本篇文章回覆於2012-02-24 17:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

亂馬客
檢舉此回應
請問使用Size較小的圖就OK嗎?
有時權限不足也會出現Out of memory的錯誤哦!
請參考:[WINFORM]PictureBox顯示圖片的方式
本篇文章回覆於2012-02-26 13:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
可以試試先只做一個操作, 試試看會不會有ram不夠的狀況, 如果不會,也許就是bitmap資源釋放的寫法有誤
本篇文章回覆於2012-02-26 19:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

史努比
檢舉此回應
嘗試修改Bitmap的建構函式, 把PixelFormat調整大一點再試試

PixelFormat太小也會導致在建立Graphic時發生記憶體不足的Exception
本篇文章回覆於2012-02-27 18:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

Derrick
檢舉此回應


這是我們在用的測試code
似乎光new就會造成記憶體不足
不過上面的寫法
是我們在new出一個bitmap,之後釋放掉的寫法!!
可以請大家看看!
本篇文章回覆於2012-02-29 08:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

史努比
檢舉此回應

CODE IN VB:



在一台8GB 64位元CPU的電腦跑 確實可以產生一個15722 * 15722 * 64位元色的圖檔沒有問題
本篇文章回覆於2012-02-29 11:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

Derrick
檢舉此回應
謝謝史努比大大的幫忙

不過這個問題,是我現在正在開發的軟體發生的

所以如果是考慮到任何USER的電腦

就沒辦法從這樣的角度來確定

可以成功new出一個相當大的圖檔!


本篇文章回覆於2012-02-29 11:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

史努比
檢舉此回應
重點是:PixelFormat.Format64bppArgb 你做過測試了嗎?

修改成較大的格式之後, Create Graphic 時還會跳出記憶體不足的情況嗎?
本篇文章回覆於2012-02-29 11:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

Derrick
檢舉此回應
我試過了Q____Q

一樣無法new出一個Bitmap

不過還是感謝你^^"
本篇文章回覆於2012-02-29 11:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

回覆
如要回應,請先登入.