讀取BMP圖 |
尚未結案
|
hilliverson
一般會員 發表:1 回覆:1 積分:0 註冊:2004-06-06 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
引言: 各位大大 : 我們老師要我們不要用BCB中的Image去讀取BMP圖,要我們抓取BMP檔中的資料,然後顯示出來。 我已經找到了BMP的表頭檔的資訊,想問各位大大有什麼辦法可以直接將圖形中的表頭檔抓出,而且將BMP圖利用TMemoryStream顯示出來。 另外小弟還有一個小問題,就是 virtual int __fastcall Write(const void *Buffer, int Count); 中的Buffer是要傳入什麼啊?hilliverson: http://delphi.ktop.com.tw/topic.php?topic_id=46059 【問題】表單若有覆蓋,如何讓圖不被上面表單抹掉 答題得分者為:richtop 但請關注RaynorPao 包子版大的話。 請參考! Andy Chang
------
Andy Chang |
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
|
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
|
hilliverson
一般會員 發表:1 回覆:1 積分:0 註冊:2004-06-06 發送簡訊給我 |
|
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
引言: 感謝各位的幫助,只是可能小弟我的表達能力不夠好。hilliverson您好..我想您可能沒有很仔細看我給您的連結... 您好像是看到 > <>< face="Verdana, Arial, Helvetica">引言: 我的問題是,我不能借用BCB中的TBitmap的幫助,我必須自己宣告出BITMAPFILEHEADER, BITMAPINFOHEADER, 關於BMP的HEADER....結構該怎麼寫... http://delphi.ktop.com.tw/topic.php?topic_Id=19839 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_62uq.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_1rw2.asp 引言: 然後將我的表現出來的圖的資訊填入其中,之後再借助TMemoryStream將圖show出來。您的表達好像真的不太清楚..我很費神的去解讀才知道您想做什麼 T_T 我"猜想"應該是以下步驟.. 1..用TMemoryStream把BMP檔整個讀進來 2..解析其中的BITMAPFILEHEADER,BITMAPINFOHEADER 3..根據您所得的BITMAPFILEHEADER,BITMAPINFOHEADER..要對那張圖做某些處理 4..處理完的結果要直接寫入TMemoryStream中 5..TMemoryStream裡的圖SHOW出來.. (5這部分我不太確定您到底想怎麼做..要用IMAGE還是CANVAS..還是一個顏色一個顏色填到IMAGE?) 所以我先針對前4點解說 1... TMemoryStream* MemoryStream=new TMemoryStream(); MemoryStream->LoadFromFile('XXX.BMP'); 2..結構怎麼寫...上面已經有了..要填到結構裡..也很簡單.. MemoryStream->Position=0; MemoryStream->Read(BITMAPFILEHEADER,Sizeof(BITMAPFILEHEADER)); MemoryStream->Position=Sizeof(BITMAPFILEHEADER) 1; MemoryStream->Read(BITMAPINFOHEADER,Sizeof(BITMAPINFOHEADER)); 3..您把結構BITMAPFILEHEADER,BITMAPINFOHEADER宣告好了之後..應該很已很輕易的取得裡面的欄位值 例如 BitmapInfo.bmiHeader; //取得圖檔總容量 要做處理..也很簡單..您只要寫一個二維陣列..把MemoryStream先做 MemoryStream->Position=sizeof(BITMAPFILEHEADER) sizeof(BITMAPINFOHEADER); 之後再從這一點開始READ直到Stream尾到陣列中..MemoryStream->Read(您的矩陣,Sizeof(您的矩陣)); 4..寫入到MemoryStream中.. 這我PO過了..參考..http://delphi.ktop.com.tw/topic.php?topic_Id=46939..裡面.. stream->WriteBuffer( &BitmapFileHead, sizeof(BitmapFileHead) ); stream->WriteBuffer( &BitmapInfo, sizeof(BitmapInfo) ); 您想用WRITE也可以..用法都相同的..以上我說的很明白了..畢竟這是您的作業..還是要靠自己完成的.. 既然是作業..學校就喜歡搞些小把戲(不能用XXX)..剩下的要靠您自己解決了喔 發表人 - |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |