有關MemoryStream的問題 |
答題得分者是:gemi0305
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
在小弟先前的一個如何利用(TObject *Sender)來減少重複程式問題中,Justmade大哥提到:
1. 你可用從 (TClientSocket *Sender).Name 找出是幾號 或
2. 你可在 ClientSocketX.Tag 存放號數來分辦是幾號 找出合適的 MemoryStream 由於 MemoryStream 不是元件所以不能用 FindComponent 方法找出合適的,你可以用一個 Array 或 TList 來裝著這些 MemoryStream 的 Pointer, 在找到是幾號後使用 小弟嘗試將MemoryStream的位址放在array中,此部分程式碼如下:
jpgStream1=new TMemoryStream;
jpgStream2=new TMemoryStream;
jpgStream3=new TMemoryStream;
jpgStream4=new TMemoryStream; //以下部分我測試過是錯誤的,我的用意是想取出各stream的指標
jpg_pos[0] = jpgStream1;
jpg_pos[1] = jpgStream2;
jpg_pos[2] = jpgStream3;
jpg_pos[3] = jpgStream4; 那麼請問大家,若我想讀寫第n號MemoryStream時該怎麼寫呢? 先謝謝大家啦! 發表人 - danielj 於 2003/07/16 11:19:57
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
danielj你好,
一維array的方式,現在好像在bcb中比較少人用,
大家對一維好像都用List來存放,
可以試試看這樣寫:
宣告:
TList *jpg_pos = new TList; 加入:
jpg_pos->Add(jpgStream1);
jpg_pos->Add(jpgStream2);
jpg_pos->Add(jpgStream3);
jpg_pos->Add(jpgStream4); 要取其中第n茟:
jpg_pos->Items[n]; // 注意0為第一茟 讓你參考看看
剛剛那個
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
再次感謝gemi0305! 我從您的回覆中已經知道如何取到某個memorystream的指標,但是我還是不知道怎麼透過這個指標去讀寫某個MemoryStream jpgStream1=new TMemoryStream;
jpgStream2=new TMemoryStream;
jpgStream3=new TMemoryStream;
jpgStream4=new TMemoryStream;
TList *jpg_pos = new TList;
jpg_pos->Add(jpgStream1);
jpg_pos->Add(jpgStream2);
jpg_pos->Add(jpgStream3);
jpg_pos->Add(jpgStream4); 譬如說要讀圖進到jpgStream1,要怎麼利用jpg_pos[0]來達成呢?
也就是說,我想把原本用
if (jpg_num==1)
jpgStream1->LoadFromFile("1.jpg");
else if (jpg_num==2)
jpgStream2->LoadFromFile("1.jpg");
else if (jpg_num==3)
jpgStream3->LoadFromFile("1.jpg");
else if (jpg_num==4)
jpgStream4->LoadFromFile("1.jpg"); 以較簡潔方便的方式來取代 請gemi0305及各位高手們教一下,謝謝!
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
再次感謝gemi0305! 我從您的回覆中已經知道如何取到某個memorystream的指標,但是我還是不知道怎麼透過這個指標去讀寫某個MemoryStream jpgStream1=new TMemoryStream;
jpgStream2=new TMemoryStream;
jpgStream3=new TMemoryStream;
jpgStream4=new TMemoryStream;
TList *jpg_pos = new TList;
jpg_pos->Add(jpgStream1);
jpg_pos->Add(jpgStream2);
jpg_pos->Add(jpgStream3);
jpg_pos->Add(jpgStream4); 譬如說要讀圖進到jpgStream1,要怎麼利用jpg_pos[0]來達成呢?
也就是說,我想把原本用
if (jpg_num==1)
jpgStream1->LoadFromFile("1.jpg");
else if (jpg_num==2)
jpgStream2->LoadFromFile("1.jpg");
else if (jpg_num==3)
jpgStream3->LoadFromFile("1.jpg");
else if (jpg_num==4)
jpgStream4->LoadFromFile("1.jpg"); 以較簡潔方便的方式來取代 請gemi0305及各位高手們教一下,謝謝!
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
多謝gemi0305的提醒,我現在就把程式的目的敘述一下: 我想要利用一個TreeView及一個ListView來構成有點像是電子相簿的東西,TreeView是用來顯示相簿目錄,譬如像:
我的相簿--
|-- 加入新目錄
|-- 結婚紀念
|-- 太平山出遊
|-- 墾丁出遊 當然一開始我的相簿是空的,必需選取TreeNode的 "加入新目錄" 這一項,此時希望在ListView那邊的畫面出現:
加入相片
加入相片組
加入相片摘要圖 然後再由雙擊加入" "去加入想要的東西,雙擊加入某項之後還需要跳出設定頁(我目前是用另一個Form來顯示),譬如說相片大小及相片拍攝日期、拍攝者等,等設定好了之後,此項目就被加入在TreeNode的第一層目錄,以後每選到這個目錄,ListView的視窗就要出現設定的圖片及內容,若是選到"加入目錄"則是出現ListView的加入項目。特別的是我想做到能由camera即時輸入影像,所以需要一些動態存取記憶體的方式,所以想利用MemoryStream,每個目錄對應一個MemoryStream,選到某一個項目,就要顯示出對應的圖片。 以上有點亂,大家如果看不懂我寫的再提出來問好了,先謝謝大家囉!
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
danielj你好,
小弟不才,因為平時很少把TMemoryStream拿來做影像的處理,
所以只會對bmp檔做,至於jpg檔的話,可能你要請教版上的前輩了說
我盡我所知的告訴你哦~ 以下範例:
請在 class="code"> //----------------------------------------------------------- #include
|
danielj
初階會員 發表:65 回覆:135 積分:40 註冊:2003-06-11 發送簡訊給我 |
gemi0305謝謝您啦!您點出了重點,還特別留了一點給我自行設法,真是用心良苦!不過不才在下亂試竟也試出來了,修改過的程式碼如下,還請大家不吝指正,謝謝大家!
//--------------------------------------------------------------------------- #include
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |