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

在使用scanline時是不是有什麼要特別注意的

尚未結案
miloshop
一般會員


發表:8
回覆:22
積分:6
註冊:2004-10-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-29 13:52:57 IP:140.124.xxx.xxx 未訂閱
請問一下,我現在使用Graphics::TBitmap產生一個圖型後並用使用scanline讀取其r,g,b的值,之後再用ptr的方式去把r,g,b的值取出轉成HSV色彩空間。可是當我在做RGB2HSV時,卻會造成"access violation in 0X?????"這樣的訊息,不知道大家是不是會有類似的情況發生呢??在使用r,g,b的值直接丟到靜態的矩陣時,也會有同樣的問題產生!!但是只要把RGB2HSV(float r,float g,float b)的這個函式抽掉卻又可以正常動作!! 麻煩一下..謝謝!!
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-30 22:40:35 IP:221.169.xxx.xxx 未訂閱
讀寫到非法的記憶體空間了,把那個函式列出來看看吧
miloshop
一般會員


發表:8
回覆:22
積分:6
註冊:2004-10-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-31 18:41:21 IP:219.70.xxx.xxx 未訂閱
謝謝..那個問題我解決了,可是我又遇到另一個問題了!! 我在一個640*480的圖檔上,擷取200*200大小的一張圖 例如: Graphics::TBitmap *Bmp=new Graphics::TBitmap(); Graphics::TBitmap *ROI=new Graphics::TBitmap(); 而當我使用 ::BitBlt(ROI->Canvas->Handle,0,0,x2-x1,y2-y1,Bmp->Canvas->Handle,x1,y1,SRCCOPY); 以後得到ROI影像為我所有的圖 但是我用下列程式碼去取得我所想要的圖型範圍時 Byte *ptr; for(int j=0;jHeight;j ) ptr=(Byte*)ROI->ScanLine[j]; for(int i=0;iWidth;i ) b=ptr[i*3]; g=ptr[i*3 1]; r=ptr[i*3 2]; //---------------------------- 這段為對顏色的判斷,若r,g,b介於某種範圍的話則為255 不然則為0 //---------------------------- if(condition){ ptr[i*3]=ptr[i*3 1]=ptr[i*3 2]=(Byte)255; } else{ ptr[i*3]=ptr[i*3 1]=ptr[i*3 2]=(Byte)0; } 然後最後再 Image1->Picture->Assign(ROI); 可是最後我不管怎麼用,所看到的結果都不是二值化的結果(看到的是原本擷取的圖片),我查了很久,但是還是找不到問題所在,請各位大大分享一下經驗好嗎??是不是在使用Ptr的時候要注意什麼,不然為什麼都沒有辦法指派值回去
ctako
一般會員


發表:1
回覆:3
積分:0
註冊:2003-08-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-03 13:23:57 IP:210.68.xxx.xxx 未訂閱
嗯~~~看起來像是你的for迴圈沒加大括號{}!
系統時間:2024-05-20 23:00:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!