全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2335
推到 Plurk!
推到 Facebook!

如何加速縮圖製作的時間

 
straydog
一般會員


發表:3
回覆:2
積分:1
註冊:2006-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-09-05 10:38:47 IP:59.124.xxx.xxx 訂閱

各位先進好

小弟正在寫的程式有一部份跟檔案總管顯示縮圖的功能一樣, 我是以 listview 為基礎來做的,基本上已經完成,但有一個大缺點,就是第一次製作縮圖的速度很慢,我已經先 browse 版上其他相關文章,內容大部分我都已經做了,像是將第一次產生的縮圖存到圖檔的檔頭,這樣第二次顯示縮圖就會很快,或是調整一些參數,可是問題在於第一次製作縮圖太慢,跟 檔案總管或是ACDSee 相比差太多 , 所以才再次問這個老問題,希望有經驗的人能不吝指教 , 謝謝

以下是我的部分code

第一步, 利用 jpeg 元件將圖檔讀入

TJPEGImage *jp=new TJPEGImage();
jp->Performance = jpBestSpeed;
jp->Scale=jsEighth;
jp->LoadFromFile(target_file);

第二步, 將jp 物件 assign 給bmp物件

bmp->Assign(jp);

第三步, 將此bmp物件copy 到DestBmp物件,同時進行縮小的動作

DestBmp->Canvas->CopyRect(Rect(left, top, left w, top h), bmp->Canvas, Rect(0,0, bmp->Width, bmp->Height));

根據程式計算的結果,第一步跟第二步最花時間, 以處理 50 張 10 M 的jpeg圖檔來說, 各花了30 秒與 35 秒, 而檔案總管在第一次顯示縮圖時並沒有這麼慢, 所以想問有經驗的人是否有加速的方法或是知道檔案總管的作法?

harrypp
中階會員


發表:6
回覆:124
積分:60
註冊:2006-08-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-09-06 11:35:11 IP:210.68.xxx.xxx 未訂閱
你該做的是先分析你的處理瓶頸在哪裡?
你的程式可分兩部分,Load JPG,與Canvas,
計算每一段的執行時間差,看看是卡在前面還後面。
若是讀JPG的時間過久,則表示先天不良你就得放棄用LoadFile, Assign。
若是Canvas時間過久,則表示後天失調你可以自行寫read pixel之類的sampling code。
harrypp
中階會員


發表:6
回覆:124
積分:60
註冊:2006-08-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-09-06 11:46:48 IP:210.202.xxx.xxx 未訂閱
若如你所講轉JPG最久,
這樣只有兩個方法,在去找別的函式庫或是自己撰寫讀圖的函式庫。

你目前用的函式讀JPG,是整個檔解成BMP,
也因此圖越大浪費時間越多,最後Canvas還得縮圖。
但若只想縮圖的話,理當只要取樣部分pixel就好了,
JPG的話得找找source code來改成取樣方式。
straydog
一般會員


發表:3
回覆:2
積分:1
註冊:2006-08-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-09-06 12:55:25 IP:59.124.xxx.xxx 訂閱

謝謝 harrypp的意見, 我會由這個方向嘗試看看

系統時間:2017-10-24 19:31:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!