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

影像處理程式問題

答題得分者是:taishyang
ladesebid
一般會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-09 17:24:08 IP:140.138.xxx.xxx 訂閱
各位大大好: 我要寫一個程式,內容是一次讀取多張BMP 然後從這些BMP中,取出每張BMP中的第Y列Pixel (Ex:第一張的第10列、第二張的第10列、第三張的第10列‧‧‧依此類推) 我把圖檔存入BMP[]中,由滑鼠從第一張BMP中決定要抓出哪一列 小弟觀念不是很清楚 請問從BMP[]中取出的一列Pixel怎樣寫會比較方便? 望大大們不吝賜教 以下是我的程式碼,最後一行的語法有問題 謝謝各位    <textarea class="cpp" rows="10" cols="60" name="code"> Graphics::TBitmap *BMP[100]; int bmpcnt; void __fastcall TForm1::OpenFile1Click(TObject *Sender) { OpenPictureDialog1->Execute(); int bmp_count=0; //計算開了幾張圖 bmp_count = OpenPictureDialog1->Files->Count; //這邊可知道你開多少張圖 bmpcnt=bmp_count; for(int i=0;iLoadFromFile(OpenPictureDialog1->Files->Strings[i]); Image1->Picture->Assign(BMP[0]); //SHOW出第一張圖 } } void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { StartX=X; //滑鼠按下的X座標 StartY=Y; //滑鼠按下的y座標 for(int j=0;jWidth;i ) { Image2->Picture->Assign(BMP[j]->Pixels[i][StartY]); } } } </textarea>
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-09 18:41:17 IP:122.124.xxx.xxx 未訂閱


請問從BMP[]中取出的一列Pixel怎樣寫會比較方便?
假如橫列直行的話,可以用ScanLine取的一整列的pixel
站上有範例


望大大們不吝賜教
以下是我的程式碼,最後一行的語法有問題
明顯資料型態錯誤
你知道Assign要怎麼用嗎? 看你的需求應該不是用Assign
編輯記錄
taishyang 重新編輯於 2007-08-09 18:42:23, 註解 無‧
taishyang 重新編輯於 2007-08-09 18:42:23, 註解 無‧
ladesebid
一般會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-09 20:27:23 IP:203.67.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================


請問從BMP[]中取出的一列Pixel怎樣寫會比較方便?
假如橫列直行的話,可以用ScanLine取的一整列的pixel
站上有範例

這我就不清楚了
請問關於Assign的用法有什麼需要注意的嗎?
還是說 用什麼方法會比較好呈現?
我是bcb新手
程式也是從站上拼拼湊湊而成的
很多語法以及觀念都不是很了解
還請
taishyang大多多指教
編輯記錄
ladesebid 重新編輯於 2007-08-09 20:28:52, 註解 無‧
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-10 09:52:04 IP:122.124.xxx.xxx 未訂閱
這我就不清楚了
請問關於Assign的用法有什麼需要注意的嗎?
還是說 用什麼方法會比較好呈現?
我是bcb新手
程式也是從站上拼拼湊湊而成的
很多語法以及觀念都不是很了解

應該反問你為什麼要用Assign?
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-10 10:20:04 IP:220.130.xxx.xxx 訂閱
又是新手?
新手為什麼不念書?
這裡是論壇,不是快快樂樂教學區吧?

===================引 用 ladesebid 文 章===================

===================引 用 taishyang 文 章===================


請問從BMP[]中取出的一列Pixel怎樣寫會比較方便?
假如橫列直行的話,可以用ScanLine取的一整列的pixel
站上有範例

這我就不清楚了
請問關於Assign的用法有什麼需要注意的嗎?
還是說 用什麼方法會比較好呈現?
我是bcb新手
程式也是從站上拼拼湊湊而成的
很多語法以及觀念都不是很了解
還請
taishyang大多多指教
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
ladesebid
一般會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-14 13:19:01 IP:140.138.xxx.xxx 訂閱

===================引 用 taishyang 文 章
應該反問你為什麼要用Assign?

先謝謝你的回答
Assign可以將TempBitmap傳給Image2秀出,不曉得我說的對嗎?


下面是我修改過,用ScanLine寫出的
請教大大幾個問題
1.
for(int i=0;iWidth*3;i ) //如果只用Image1->Width,結果圖只會出現左半部1/3, 請問為什麼?
2.
scanline有辦法抓行嗎?(抓直的) 我看書上都是抓一列一列.. ,還是有其他的語法?

謝謝 ^^

<textarea class="cpp" rows="10" cols="90" name="code">void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Graphics::TBitmap *TempBMP; //指標*TempBMP指向一個Bitmap TempBitmap=new Graphics::TBitmap(); //此*TempBMP所指的是一新的空白Bitmap TempBitmap->Width=720; TempBitmap->Height=480; TempBitmap->PixelFormat=pf24bit; //沒此行的話Image2會是白的 Byte *ptr1,*ptr2; StartX=X; //滑鼠按下的X座標 StartY=Y; //滑鼠按下的y座標 Label1->Caption=StartX; Label2->Caption=StartY; for(int j=0;jScanLine[StartY];//ptr2指向每張BMP的scanline頭 ptr2=(Byte*) TempBitmap->ScanLine[j]; //ptr2指向新Bitmap的scanline頭 for(int i=0;iWidth*3;i ) //如果只用Image1->Width只出現了1/3...請問為什麼? { ptr2[i]=ptr1[i]; } } Image2->Picture->Assign(TempBitmap); } </textarea>
編輯記錄
ladesebid 重新編輯於 2007-08-14 13:35:46, 註解 無‧
taishyang
站務副站長


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-14 13:32:34 IP:122.124.xxx.xxx 未訂閱
是因為24bits pixel format的關係


編輯記錄
taishyang 重新編輯於 2007-08-14 13:34:04, 註解 無‧
ladesebid
一般會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-08-14 13:41:05 IP:140.138.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
是因為24bits pixel format的關係


我了解了~ 謝謝^^

taishyang
站務副站長


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-08-14 13:51:52 IP:122.124.xxx.xxx 未訂閱

先謝謝你的回答
Assign可以將TempBitmap傳給Image2秀出,不曉得我說的對嗎?
是的,所以你之前直接assign像素值就會有問題


下面是我修改過,用ScanLine寫出的
請教大大幾個問題
1.
for(int i=0;iWidth*3;i ) //如果只用Image1->Width,結果圖只會出現左半部1/3, 請問為什麼?
因為pixel format是24bits,
所以每個像素點都會由R.G.B這3個像素組成,所以會多3倍的資料的量要處理


scanline有辦法抓行嗎?(抓直的) 我看書上都是抓一列一列.. ,還是有其他的語法?
ScanLine沒有辦法一次抓一整行的資料


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