線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2160
推到 Plurk!
推到 Facebook!

快速的作縮圖問題

尚未結案
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-01 12:59:17 IP:203.204.xxx.xxx 未訂閱
前一陣子在研究如何快速的替一張圖檔(jpg、gif,BMP等)做縮小圖, 測來測去,發現acdsee在做大張jpg圖檔時,如2048x2048圖檔的縮圖時明顯快了許多,如果TImage用Stretch也沒辦法那麼快,最後發現用gdi 內建的做縮圖指令才有辦法做的跟acdsee差不多速度,不知有沒有人有快速度做縮圖的方法呢?謝謝?
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-01 13:44:29 IP:61.218.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26583    僅供參考,歡迎繼續發言
------
︿︿
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-01 14:13:58 IP:203.204.xxx.xxx 未訂閱
謝謝您的轉貼不過這部份我已經完成了,我現在的問題倒不是這個,而是只針對單一張圖檔做縮圖的速度問題,不知各位有沒發現,當我們用Timage載入一張jpg圖檔時,會先將JPG解壓縮放到picture.Bitmap中,之後才畫到Timage的canvas上,經我測試的結果,當jpg如果粉大的時候(如2048*2048),其實將JPG解壓縮放到picture.Bitmap中的速度其實非常的快,幾乎是你按下執行鈕的那一刻就解好了,但是當你要將picture.Bitmap畫到canvas時就需要等個幾秒.......... 可能是因為我們要將圖檔縮小顯示,因此在做大圖換小圖的運算..... . 。其實這邊才是我真正想問的,實際上要怎麼實作縮圖才會快,因為我發現其實show縮圖的快慢,在於做縮圖的技巧。雖然Timage中可以設Stretch,它會call API來達成縮圖的效果,但在處理大張jpg圖的速度上確有點不儘理想,不知有沒有人有做過縮圖理論的研究呢?
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-01 14:25:09 IP:61.218.xxx.xxx 未訂閱
iamjsn:    不要用 timage    自己寫一個 邊讀邊畫的元件    僅供參考,歡迎繼續發言
------
︿︿
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-01 15:11:03 IP:203.204.xxx.xxx 未訂閱
想要自己作出快速縮圖,那就得很清楚圖檔的格式。 例如原圖檔 2048x2048 如果我們要縮圖成 1/64 的大小 256x256 那我們只需要將顯示需要的那 256x256 的像素資料讀出(或計算出),其他的不理,這樣才會比整個圖檔處理要快 64 倍(理論上),如果您用 Stretch 那還是整個 2048x2048 都讀出了,鐵定是快不了。    如果按您測試,讀出整張圖都不需要花太多時間,那就是要自己花功夫在 Stretch 上。    當您已將整張圖都讀出,還是可以放在一個 TImage 或是 TBitmap 但是「不顯示」,再使用自己的 Stretch 演算法,例如最簡單的 N 點取 1 點的方式,重組一個新的 TImage 或 TBitmap ,再以重組後的 TImage 或 TBitmap 來顯示。 在處理像素時,如果要求速度,那就不要用 Pixel 來取得每一點的 TColor 值,請改用 Scanline 取得每一 row 的 raw data 數值。    這樣速度應該就可以很快了(雖然您得寫較多的 code 但應該是會快才對)。    沒空更新的網頁... http://coolsite.to/dllee C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-01 21:34:18 IP:61.221.xxx.xxx 未訂閱
引言: 前一陣子在研究如何快速的替一張圖檔(jpg、gif,BMP等)做縮小圖, 測來測去,發現acdsee在做大張jpg圖檔時,如2048x2048圖檔的縮圖時明顯快了許多,如果TImage用Stretch也沒辦法那麼快,最後發現用gdi 內建的做縮圖指令才有辦法做的跟acdsee差不多速度,不知有沒有人有快速度做縮圖的方法呢?謝謝?
iamjsn 你好: 建議你先參考站長寫的內差法
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-02 02:43:47 IP:203.204.xxx.xxx 未訂閱
感謝各位的建議,我想我大概知道怎麼做了,謝謝。 應該會用scanline 內插法來完成吧 ^_^
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-03 20:02:04 IP:203.204.xxx.xxx 未訂閱
我要更正我之前的測試發言,先前提到用jpeg.pas解壓縮粉快的這一件事,因為這是我去年的記憶,最近我追了一下source發現,當我們第一次要paint jpg圖檔時,才會呼叫到jpeg.pas裏的getbitmap Getbitmap這個程序才會開始對jpg做解壓縮的動作,這裏才是整個show圖之所以會慢的真正地方,這個地方測了粉多次,總是覺得這段source解壓縮的速度有點慢(因為acdsee秀一張圖跟本不用那麼久),一些能設的屬性都設了還是比別人慢,目前也無能為力了....只好先不理它。期待有高人能指點了。
系統時間:2024-04-26 16:21:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!