[爆卦]ppt縮圖不對是什麼?優點缺點精華區懶人包

為什麼這篇ppt縮圖不對鄉民發文收入到精華區:因為在ppt縮圖不對這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者googled (15357)看板C_and_CPP標題[問題] 撰寫"開啟檔案"...

ppt縮圖不對 在 荃鈺 曾 Instagram 的最佳解答

2021-08-18 21:57:02

最近兩週又實驗了多場線上教學活動​ 包含線上桌遊、線上心智圖教師培訓、線上簡報互動、議題討論等​ 但我個人最有感的,是一場對「#帕運選手 #口語表達 培訓課」​ ​ 3小時的課程,​ 我準備了將近24小時​ 因為對象包含有「聽力障礙」​ 「視力障礙」跟「肢體障礙」的運動員​ ​ 要怎麼讓這些選手​ ...



不好意思,小弟目前再用Qt寫一程式時,

因為XP系統的開啟檔案似乎沒辦法預設就是縮圖模式

如圖:http://ppt.cc/Nmm5

必須要從紅圈處改成縮圖才可以

所以必須要寫一個開檔功能應用在XP上 (老闆堅持用XP...)

目前已經做到可以在List上顯示該目錄下的所有檔案類型

如圖:http://ppt.cc/fWTL

但對於縮圖的實做上有些問題想請教

目前置作縮圖的方法是將目錄上的所有檔案都過濾,

只顯示屬於圖檔的部分,接著去讀取每一張圖,然後呼叫函式縮小

最後再放到List上,但這樣有一個問題是每前進一個目錄

我的程式都會Delay直到該目錄下所有圖片都縮完並顯示為止

如果圖片有20張,我程式大概會有2~3秒不能動

本來想說用執行緒的方式去實作,還沒縮完的圖檔都用系統預設的Icon

縮完一張圖片在更新一個ListItem,像這個樣子

http://ppt.cc/Mvpi

可是還沒去實作就又想到一個問題,就是當圖片過大時,

開檔並縮小的時間就越長,可是看了一下Win7的縮圖功能,卻都是神之快

不管我圖片在大,每當進入資料夾後,系統製作縮圖的速度真的超迅速

而且我程式在進行縮圖的過程中,程式記憶體會標很高,

甚至很容易出現"記憶體不足"的錯誤,

但看了一下系統管理員卻還有好幾G的記憶體可用,也滿莫名其妙的

所以又感覺自己的方向不對,想請教一下各位高手,

能否給小弟一點方向、建議或提示,該怎麼做才可以快速產生縮圖

還是說有辦法直接去讀取XP、win7系統中該圖片的thumbnail cache

或者XP有辦法調成預設開啟檔案就是縮圖模式ˇ_ˇ

謝謝各位

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.158.60.5
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1398776952.A.335.html
※ 編輯: googled (49.158.60.5), 04/29/2014 21:09:32
LiloHuang:Windows 的縮圖快取可以透過 IExtractImage 來獲得 04/29 21:16
LiloHuang:這篇雖不是 C++ 的範例 http://goo.gl/N7RLlz 仍可參考 04/29 21:17
好的,感謝你的幫忙,我再來看看有沒有辦法跟Qt結合
LiloHuang:至於記憶體不足,除了 memory leak 有些該釋放沒釋放 04/29 21:23
LiloHuang:還有一種可能就是圖片太大,難以配置到連續的記憶體空間 04/29 21:23
我看了一下記憶體的變化,我進入到140m的照片資料夾後,讀取的記憶體卻高達1G多

還滿奇怪的,不過我程式確實就當掉了,看了一下工作管理員的記憶體

"可用"還有2G多,"未使用"只剩不到一百,然後"可用"慢慢的減少

"未使用"卻在慢慢的增加,我在想會有可能會是程式讀取圖片太快,

系統轉換記憶體太慢導致當掉的嗎?

對作業系統不是很熟ˇ_ˇ
LiloHuang:至於讓 XP 直接顯示 thumbnail view 應該沒直接的方式 04/29 21:32
LiloHuang:倒是這兒有一篇文章提到,有一些特殊技巧可以辦到 :P 04/29 21:33
LiloHuang:http://goo.gl/lm3hnw 自己 SendMessage 給 dialog 囉 04/29 21:33
LiloHuang:SendMessage(hWnd, WM_COMMAND, ODM_VIEW_THUMBS, 0); 04/29 21:50

剛剛立刻GOOGLE查QT使用SendMessage的方法測試了一下,

但卻FileDialog卻沒有反應,本身也沒學過WIN32,使用的方法也不知道對不對

#include <windows.h>
QFileDialog fileDialog;
::SendMessageW( (HWND)fileDialog.winId(), WM_COMMAND, 0x702b, 0);
fileDialog.exec();

不過一直覺得這方法是最下策,總覺得這樣算是偷吃步,並不是真正解決問題
雖然有完成需求才是最重要的...
LiloHuang:還有如果自己 decode 會卡住,是因為 UI thread 被卡住 04/29 21:53
LiloHuang:會卡 UI 的任務,都該放到 worker thread 非同步執行 04/29 21:55
LiloHuang:待任務完成之後,再通知 UI thread 更新畫面之類的 04/29 21:56
我發現我文章要打"執行緒"卻打成"副程式",哈哈

感謝L大的指導以前英文沒學好,第一篇文章明天放學要來慢慢邊翻譯邊看了

感謝你
※ 編輯: googled (49.158.60.5), 04/30/2014 00:19:38
※ 編輯: googled (49.158.60.5), 04/30/2014 00:20:19
LiloHuang:雖然我沒有真的測試,但根據 MSDN 那篇文章的描述 04/30 00:50
LiloHuang:SendMessage 在特定情況才會成功,其他狀況會失敗 04/30 00:50
LiloHuang:可能要做一下 Hook 在 init dialog 時,送 PostMessage 04/30 00:51
LiloHuang:給 FileDialog 自己,然後再該時機點去改變排序的類型 04/30 00:52
LiloHuang:觀察記憶體用量請用 procexp.exe http://goo.gl/n7utTE 04/30 00:55
LiloHuang:搭配下 debug break point 來幫助自己釐清哪些階段增加 04/30 00:56
LiloHuang:procexp 使用時,請直接針對你的 process 點兩下來觀察 04/30 00:56
LiloHuang:如果可以直接改 dialog 排序達成目的當然是最快 04/30 00:59
LiloHuang:其次是 IExtractImage 這方法得懂一些 COM 操作 04/30 01:00
LiloHuang:自己 decode 圖片,除非是特殊需求 (如要顯示 RAW 檔) 04/30 01:00
LiloHuang:不然寫的好可是不簡單的任務... 大概是這樣 :) 04/30 01:01

你可能也想看看

搜尋相關網站