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

如何製作如ACD快速顯示圖片

尚未結案
kevintam
一般會員


發表:7
回覆:11
積分:3
註冊:2003-02-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-20 12:11:08 IP:211.74.xxx.xxx 未訂閱
各位大大: BCB要如何做出像ACD顯示圖時快速,以下是我用的方法,但是在顯示是遇到上百張時速度慢的不行,是否要寫執行緒的方式顯示,請大大指點。 void __fastcall TShowMainForm::TreeViewChange(TObject *Sender, TTreeNode *Node) { TSearchRec sr; TListItem *ListItem; NowSelectPath = TreeViewGetPath(Node); int iPicCount=0; ImageList1->Clear(); ListView1->Items->Clear(); if ( !FindFirst(NowSelectPath "\\*.jpg",faAnyFile, sr) ) { do { TJPEGImage *PicJpg = new TJPEGImage(); try { PicJpg->LoadFromFile(NowSelectPath "\\" sr.Name); } catch(...) { ShowMessage(NowSelectPath "\\" sr.Name); } Graphics::TBitmap *DestBmp = new Graphics::TBitmap(); float JpgWidth = PicJpg->Width; float JpgHeight = PicJpg->Height; DestBmp->Width=180; DestBmp->Height=180; DestBmp->Canvas->StretchDraw(Rect(1,1,JpgWidth,JpgHeight),PicJpg); ListItem = ListView1->Items->Add(); ListItem->Caption = sr.Name; ListItem->ImageIndex = ImageList1->Add(DestBmp,NULL); delete PicJpg; delete DestBmp; StatusBar1->Panels->Items[0]->Text = "Total : " IntToStr( iPicCount) " Jpeg."; Application->ProcessMessages(); } while ((!FindNext(sr)) && (!bCloseForm)); FindClose(sr); } } //---------------------------------------------------------------------------
RaynorPao
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-20 12:19:53 IP:203.73.xxx.xxx 未訂閱
引言: 各位大大: BCB要如何做出像ACD顯示圖時快速,以下是我用的方法,但是在顯示是遇到上百張時速度慢的不行,是否要寫執行緒的方式顯示,請大大指點。 void __fastcall TShowMainForm::TreeViewChange(TObject *Sender, TTreeNode *Node) { TSearchRec sr; TListItem *ListItem; NowSelectPath = TreeViewGetPath(Node); int iPicCount=0; ImageList1->Clear(); ListView1->Items->Clear(); if ( !FindFirst(NowSelectPath "\\*.jpg",faAnyFile, sr) ) { do { TJPEGImage *PicJpg = new TJPEGImage(); try { PicJpg->LoadFromFile(NowSelectPath "\\" sr.Name); } catch(...) { ShowMessage(NowSelectPath "\\" sr.Name); } Graphics::TBitmap *DestBmp = new Graphics::TBitmap(); float JpgWidth = PicJpg->Width; float JpgHeight = PicJpg->Height; DestBmp->Width=180; DestBmp->Height=180; DestBmp->Canvas->StretchDraw(Rect(1,1,JpgWidth,JpgHeight),PicJpg); ListItem = ListView1->Items->Add(); ListItem->Caption = sr.Name; ListItem->ImageIndex = ImageList1->Add(DestBmp,NULL); delete PicJpg; delete DestBmp; StatusBar1->Panels->Items[0]->Text = "Total : " IntToStr( iPicCount) " Jpeg."; Application->ProcessMessages(); } while ((!FindNext(sr)) && (!bCloseForm)); FindClose(sr); } } //---------------------------------------------------------------------------
kevintam 你好: 先請問一下~~你是一次先載入所有的圖檔嗎?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
kevintam
一般會員


發表:7
回覆:11
積分:3
註冊:2003-02-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-20 12:39:39 IP:211.74.xxx.xxx 未訂閱
引言: kevintam 你好: 先請問一下~~你是一次先載入所有的圖檔嗎?? -- >< face="Verdana, Arial, Helvetica"> 大大你好: 是的..但我在載入時會依序載入但效果不佳,是否要撰寫如執行緒的概念...是要將某一目錄下jpg的圖案都一並顯示出來;因為我們是做監控系統的,監控的畫面皆會存放在歸屬的目錄下.
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-20 13:09:56 IP:140.135.xxx.xxx 未訂閱
kevintam您好: 您可以利用Timer來作連續讀圖檔的動作... 我測試過連續讀上千張圖檔都不會有問題.... 我們是同行ㄝ,我也有在做監視系統 ^_^
kevintam
一般會員


發表:7
回覆:11
積分:3
註冊:2003-02-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-20 15:02:08 IP:211.74.xxx.xxx 未訂閱
引言: kevintam您好: 您可以利用Timer來作連續讀圖檔的動作... 我測試過連續讀上千張圖檔都不會有問題.... 我們是同行ㄝ,我也有在做監視系統 ^_^
您好: 我連續讀取是沒有問題,但是在顯示圖的速度大大折扣了,因為我是利用搜尋圖案再利用ImageList加入ListItem(程式如下),此時它會連續RUN但是要等到他完全讀取完時才會結束,效率上大大折扣;您在監控系統要顯示全部圖片是如何寫的,我是想做出和ACD一樣顯示圖片的方式.....希望各位大大指點 Graphics::TBitmap *DestBmp = new Graphics::TBitmap(); float JpgWidth = PicJpg->Width; float JpgHeight = PicJpg->Height; DestBmp->Width=180; DestBmp->Height=180; DestBmp->Canvas->StretchDraw(Rect(1,1,JpgWidth,JpgHeight),PicJpg); ListItem = ListView1->Items->Add(); ListItem->Caption = sr.Name; ListItem->ImageIndex = ImageList1->Add(DestBmp,NULL);
RaynorPao
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-21 15:37:09 IP:203.73.xxx.xxx 未訂閱
引言: 您好: 我連續讀取是沒有問題,但是在顯示圖的速度大大折扣了,因為我是利用搜尋圖案再利用ImageList加入ListItem(程式如下),此時它會連續RUN但是要等到他完全讀取完時才會結束,效率上大大折扣;您在監控系統要顯示全部圖片是如何寫的,我是想做出和ACD一樣顯示圖片的方式.....希望各位大大指點
kevintam 你好:
以下是我對你的問題的建議(參考看看)
( >
(>    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
kevintam
一般會員


發表:7
回覆:11
積分:3
註冊:2003-02-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-21 16:37:36 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 您好: 我連續讀取是沒有問題,但是在顯示圖的速度大大折扣了,因為我是利用搜尋圖案再利用ImageList加入ListItem(程式如下),此時它會連續RUN但是要等到他完全讀取完時才會結束,效率上大大折扣;您在監控系統要顯示全部圖片是如何寫的,我是想做出和ACD一樣顯示圖片的方式.....希望各位大大指點
kevintam 你好:
以下是我對你的問題的建議(參考看看)
( >
(>    -- >< face="Verdana, Arial, Helvetica">
感謝大大的指點....       因為專題的需要,需要在教師點選到特定的目錄時,在顯示時就可以看到圖  片(大小約180*180,因為要讓老師看到是否有作幣的畫面,不需一個一個點  來看)我以有利用FindFirst的方式尋找出jpg的圖,但問題是在要顯示是效率不佳(找到時再將圖show出來),如ACD是先找到所以檔案數,再慢慢的顯示......    我的專題介面和ACD顯示時的圖
http://tw.photo.yahoo.com/kevintam5566/ab1/     
        
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-21 18:24:29 IP:61.218.xxx.xxx 未訂閱
引言: 我的專題介面和ACD顯示時的圖 http://tw.photo.yahoo.com/kevintam5566/ab1/
參考這個範例試試! 1.類似 ACDsee 中縮圖瀏覽的功能 http://netcity1.web.hinet.net/UserData/nep2314/Datas/BmpViewer.zip 2.當圖片大於可視範圍時如何用滑鼠拖曳圖片,也就是ACDSee用滑鼠抓住圖片移動的功能。 http://netcity1.web.hinet.net/UserData/nep2314/Datas/MovePic.zip 3.利用BFbmpV11.zip元件所寫的簡單旋轉圖形的範例 ( BFbmpV11.zip 有附上 ) http://netcity1.web.hinet.net/UserData/nep2314/Datas/RotatePic.zip 資料來源:星點子工作室 http://www.sit.idv.tw/ 聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/02/21 18:27:14
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-02-21 18:49:35 IP:61.221.xxx.xxx 未訂閱
這個也可參考 【轉貼】用Delphi讀取JPEG文件的縮覽圖 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21809 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
kevintam
一般會員


發表:7
回覆:11
積分:3
註冊:2003-02-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-02-24 03:03:46 IP:211.74.xxx.xxx 未訂閱
引言: 這個也可參考 【轉貼】用Delphi讀取JPEG文件的縮覽圖 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21809 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
HI...jackkcg大大 我有試這去try您所寫的那個程式,但可能我Dephi不熟悉function不能用,是否可冒昧可有壓縮檔讓我參考,有些不懂的地方再請叫大大(Dephi轉BCB寫時)。
cmf
尊榮會員


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-02-24 09:45:25 IP:61.218.xxx.xxx 未訂閱
應 j sir 的要請 我也來回答 你的問題    哈哈 我沒用過 bcb 只用過 bc 我幫你番番看,但不一定對    【轉貼】用Delphi讀取JPEG文件的縮覽圖  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21809    void BGR2RGB(TBitmap* bmp) {     int  x,y;  char t; PCHAR data;      y=bmp->Height-1 ; while (y>=0)  {     data=bmp->ScanLine[y];      for (x=0 ;x<=bmp.Width-1 ; x++)      {     //如果你圖  色彩是  24 BIT     t=data[x*3];    data[x*3]=data[x*3+2];       data[x*3+2]=t;  }       Y--; }     );        TBitmap LoadThumb(string filename) {     Tfilestream* fstream;  Tmemorystream*  mstream;     WORD j,i; PCHAR  data;  BYTE   buf[4] ;     DWORD filesize;  Tjpegimage* fjpg; TBITMAP* bmp;  TBITMAP* result=NULL;  WORD* p;    fstream=new Tfilestream(filename,fmOpenRead);     //建立文件流,讀JPEG文件     fstream->Seek(20,soFromBeginning); //FF ED段在文件的第20個位元組處  fstream->Read(buf,sizeof(buf));     p=(WORD*)buf;    if (p*==0xEDFF) { j=buf[2]*256+buf[3]; //FF ED的大小,高位在前,低位元在後  if (j<1024) //FF ED段的大小若?1024個位元組則文件不包含縮覽圖,退出程式 { delete fstream; return result; } mstream=new TMemorystream;//建立記憶體流 mstream->CopyFrom(fstream,j); //把FF ED段拷貝到mstream data=mstream.Memory; for (i=300;i<=700;i++) //找縮覽圖的開始標誌FF D8 { p=(WORD*)&Data[i]; if (p*==0xD8FF) break; if (i<700) { fjpg=new Tjpegimage; //建立TJPEGimage 解出縮覽圖 bmp=new TBitmap; mstream->Position=i; fjpg->LoadFromStream(mstream);//fjpg讀取mstream bmp->Assign(fjpg); //JPEG轉BMP p=(WORD*)&Data[i+57]; if (p*==0x2e34) //PhotoShop 4.0的縮覽圖 BGR2RGB(bmp); //BMP的圖元格式BGR 而不是RGB,要把BGR轉化?RGB result=bmp; //函數返回BMP delete mstream; delete fjpg; //釋放Object }; }; delete fstream; return result; }; 僅供參考,歡迎繼續發言 發表人 - cmf 於 2003/02/24 09:48:41 發表人 - cmf 於 2003/02/24 12:50:45
------
︿︿
kevintam
一般會員


發表:7
回覆:11
積分:3
註冊:2003-02-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-02-24 17:48:20 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 我的專題介面和ACD顯示時的圖 http://tw.photo.yahoo.com/kevintam5566/ab1/
參考這個範例試試! 1.類似 ACDsee 中縮圖瀏覽的功能 http://netcity1.web.hinet.net/UserData/nep2314/Datas/BmpViewer.zip 2.當圖片大於可視範圍時如何用滑鼠拖曳圖片,也就是ACDSee用滑鼠抓住圖片移動的功能。 http://netcity1.web.hinet.net/UserData/nep2314/Datas/MovePic.zip 3.利用BFbmpV11.zip元件所寫的簡單旋轉圖形的範例 ( BFbmpV11.zip 有附上 ) http://netcity1.web.hinet.net/UserData/nep2314/Datas/RotatePic.zip 資料來源:星點子工作室 http://www.sit.idv.tw/ 聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/02/21 18:27:14
axsoft大大: 我在顯示圖片時有引用http://netcity1.web.hinet.net/UserData/nep2314/Datas/BmpViewer.zip這支程式改成顯示jpg格式,但效率上如同上述問題一樣。 目前正在使用cmf大大所指點的程式做修改,但還是有一連串的錯誤;不知大大您是否也有空閒幫小弟也try看看.....相關的錯誤我整理完再一並po出來,請教各位大大。
cmf
尊榮會員


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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-02-24 22:35:47 IP:61.70.xxx.xxx 未訂閱
kevintam:    你可以請 taishyang 幫你 try 看看 可能會比較快一點    taishyang 是影像處理專家 , 找他準沒錯          僅供參考,歡迎繼續發言
------
︿︿
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-02-25 13:29:32 IP:140.135.xxx.xxx 未訂閱
cmf您好:        您太抬舉我了,我程式的功力不夠啦(我接觸程式還不到一年).... 對於影像處理方面技術我會的有: 灰階,二值化,模糊化,邊緣偵測,加強對比度... 應用:物件偵測,物件追蹤,人臉追蹤... 幫不上忙真是不好意思...
系統時間:2024-04-27 5:15:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!