關於將BMP圖檔的RGB全部存在一個陣列中 |
尚未結案
|
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
請問各位我現在是寫一個將RGB全部存在同一個陣列中的,來做標準差的計算。
程式寫成功了,跑出來也是對的。
問題1.StdDev(constdouble * Data, const int Data_Size) 中的Data_Size指
的應該是陣列大小吧,我的程式中Data_Size應該是921600
(640*480*3),但是我如果寫成Edit9->Text=FloatToStr(StdDev
(b,921600));的話,只會秀出NAN而已。改成307200(640*480)的話,就
沒問題,為什麼勒???
問題2.我現在程式只能對640*480的BMP做標準差的計算,有什麼方法可以讓我
的程式也可以對不同解析度做運算,增加程式的可用性。
我目前寫成以下的程式但是編譯時過不了,請問這樣寫對嗎???
double b[(Image1->Picture->Height*Image1->Picture->Width*3)]; for (int i=0;i可以WORK的程式 double b[921600];//640*480*3 for (int i=0;i |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
iii0628 您好: 有兩個建議: 1.如果您只要算出標準差,可以直接在函式中計算,不必將資料存入陣列,再用以為參數呼叫StdDev(.)。另外不知道StdDev(.)的傳回值是什麼?檢查一下是不是float/double,或許就能解決您的問題。
2.如果您一定要先產生陣列,建議是用動態記憶體的方式為之,相關使用範例站上有很多可參考。
引言: 請問各位我現在是寫一個將RGB全部存在同一個陣列中的,來做標準差的計算。 程式寫成功了,跑出來也是對的。 問題1.StdDev(constdouble * Data, const int Data_Size) 中的Data_Size指 的應該是陣列大小吧,我的程式中Data_Size應該是921600 (640*480*3),但是我如果寫成Edit9->Text=FloatToStr(StdDev (b,921600));的話,只會秀出NAN而已。改成307200(640*480)的話,就 沒問題,為什麼勒??? 問題2.我現在程式只能對640*480的BMP做標準差的計算,有什麼方法可以讓我 的程式也可以對不同解析度做運算,增加程式的可用性。 我目前寫成以下的程式但是編譯時過不了,請問這樣寫對嗎???RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####double b[(Image1->Picture->Height*Image1->Picture->Width*3)];區域陣列變數的大小宣告需要是常數。 for (int i=0;i可以WORK的程式 |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
大大你好:1.請問你說直接在函式中計算是什麼意思???可以再麻煩說明一下,
還是大大可以方便寫個小程式???讓我參考...
2.我寫這程式目的就是只要算出標準差而已,寫成陣列是方便我在
做不同解析度的StdDev(.)函式時,可以知道Data_Size的大小,
如果不寫成陣列的還有什麼方法可以用...
希望大大可以回答一下
謝謝
引言: iii0628 您好: 有兩個建議: 1.如果您只要算出標準差,可以直接在函式中計算,不必將資料存入陣列,再用以為參數呼叫StdDev(.)。另外不知道StdDev(.)的傳回值是什麼?檢查一下是不是float/double,或許就能解決您的問題。 2.如果您一定要先產生陣列,建議是用動態記憶體的方式為之,相關使用範例站上有很多可參考。引言: 請問各位我現在是寫一個將RGB全部存在同一個陣列中的,來做標準差的計算。 程式寫成功了,跑出來也是對的。 問題1.StdDev(constdouble * Data, const int Data_Size) 中的Data_Size指 的應該是陣列大小吧,我的程式中Data_Size應該是921600 (640*480*3),但是我如果寫成Edit9->Text=FloatToStr(StdDev (b,921600));的話,只會秀出NAN而已。改成307200(640*480)的話,就 沒問題,為什麼勒??? 問題2.我現在程式只能對640*480的BMP做標準差的計算,有什麼方法可以讓我 的程式也可以對不同解析度做運算,增加程式的可用性。 我目前寫成以下的程式但是編譯時過不了,請問這樣寫對嗎???RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####double b[(Image1->Picture->Height*Image1->Picture->Width*3)];區域陣列變數的大小宣告需要是常數。 for (int i=0;i可以WORK的程式 |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
1.原來是我函式用錯了,我是對整張圖做標準差計算的話是要用PopnStdDev,
所以我Data_Size是921600就沒錯。....StdDev是抽樣用的
2.問題2還沒解決
引言: iii0628 您好: 有兩個建議: 1.如果您只要算出標準差,可以直接在函式中計算,不必將資料存入陣列,再用以為參數呼叫StdDev(.)。另外不知道StdDev(.)的傳回值是什麼?檢查一下是不是float/double,或許就能解決您的問題。 2.如果您一定要先產生陣列,建議是用動態記憶體的方式為之,相關使用範例站上有很多可參考。引言: 請問各位我現在是寫一個將RGB全部存在同一個陣列中的,來做標準差的計算。 程式寫成功了,跑出來也是對的。 問題1.StdDev(constdouble * Data, const int Data_Size) 中的Data_Size指 的應該是陣列大小吧,我的程式中Data_Size應該是921600 (640*480*3),但是我如果寫成Edit9->Text=FloatToStr(StdDev (b,921600));的話,只會秀出NAN而已。改成307200(640*480)的話,就 沒問題,為什麼勒??? 問題2.我現在程式只能對640*480的BMP做標準差的計算,有什麼方法可以讓我 的程式也可以對不同解析度做運算,增加程式的可用性。 我目前寫成以下的程式但是編譯時過不了,請問這樣寫對嗎???RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####double b[(Image1->Picture->Height*Image1->Picture->Width*3)];區域陣列變數的大小宣告需要是常數。 for (int i=0;i可以WORK的程式 |
1666362
初階會員 發表:66 回覆:124 積分:43 註冊:2004-07-07 發送簡訊給我 |
|
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
1666362你好,我已經將程式修改好了,但是現在的問題是編譯過之後,我LOAD BMP檔進來就會出現Access Violation at address 32665A01 in Module 'std.exe'Read of address '0000000C'....等訊息。爬文之後,我也將aryPtr=NULL宣告好了,不過還是會出現這類訊息,麻煩幫我看一下code好嗎???我實在是找不出還可以修改什麼了,謝謝
double *aryPtr=NULL; aryPtr = new double[Image1->Picture->Height*Image1->Picture->Width*3]; if (OpenPictureDialog1->Execute()) { Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName); } Image1->Picture->Bitmap->PixelFormat = pf24bit; byte *ptr=NULL; for (int i=0;i 引言: 用比較簡單的想法 假設你已經知道 最大解析度為640*480 那可以先宣告3個陣列 把陣列內容先設定為0 分別為 int R[640][480]={0}, G[640][480]={0}, B[640][480]={0}; 然後讀取出 pixel分別存入 再用這3陣列去做標準差運算 |
iii0628
一般會員 發表:50 回覆:46 積分:19 註冊:2005-04-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |