因為又要recording video 同時又要能 print 2Kx3K 的超高清圖片
記憶體根本不夠。所以得由我單方面來節省記憶體的使用量(另一面的Programmer, 老闆, 實在太忙了)
想了想沒有什麼節省的辦法,記憶體總共有三次配置,
一個是 alloc 2Kx3Kx3 = 23M 的buffer, 做為排版使用和最終 print 的buffer。
二是把圖片資料讀進來的buffer 約為1920x1080x3= 6M大小,這個也無法省。
三是把圖片rotate 或 resize 的buffer ,我不知道這個如何省。
最後只有最簡單 寫入檔案
也就是把Disk 當成記憶體來用
想到的就是 Memory Mapped File
在Windows 上,其流程就是
CreateFile --> CreateFileMapping --> MapViewOfFile --> 開始使用
結束則是
UnmapViewOfFile --> Close FileMapping --> Close File
在此列出實驗後的要點
1. 在WINCE 上,用CreateFile 之後的Handle 來傳入 CreateFileMapping 一直都會失敗,回傳 6 ( ERROR_INVALID_HANDLE ), 要用CreateFileForMapping 取代 CreateFile 開檔就ok。 在WINCE 上
CreateFileMapping 似乎不接受 CreateFile 所產生的 HANDLE。
2. CreateFileMapping 用PAGE_WRITECOPY 失敗用 PAGE_READWRITE 成功
沒有留言:
張貼留言