線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:758
推到 Plurk!
推到 Facebook!

請問關於編譯完直接當機的狀況....

答題得分者是:justdo
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-10 01:06:40 IP:61.59.xxx.xxx 未訂閱
小弟想對圖形做直方圖等化 可是卻出現下面兩個訊息 上面訊息點完確定之後 出現下面訊息 再點完確定後 接著就出現windows說要關閉BCB程式的訊息 小弟把程式碼貼在下面,原本這個程式碼 是我自己從另外一個自己寫的程式擷取出來的 原本寫的那個程式可以編譯, 不過現在複製到另一個程式中卻會直接當掉 小弟把這個新寫的程式,全部功能都砍掉之後 只剩這個直方圖等化的功能 結果還是一樣,所以小弟確定一定是這個複製的部分有問題 請各位大大幫我解惑一下 我困擾好久了,感謝大家~ p.s.我做的視窗為左邊是Image1, 大小為457*185 右邊為Image2,大小跟Image1一樣 而我啟動這個功能的方式是用mainmenu這個元件 另外再請問各位,為何我新寫的程式會無緣故的跟我再多要 一個unit呢? 我前一個程式是用了兩個unit,可是我現在寫的這個 我並沒有include任何其他unit阿? 為何他會主動跟我要,不過新增沒作用的unit後 編譯完依舊會出現BCB強制結束的狀況....
 
int p1[1000][1000]={0};    void p1Pixel(Graphics::TBitmap *pBmp)
{    Byte *ptr;
for (int i=0;iHeight;i++ )
{
  ptr=(Byte*)pBmp->ScanLine[i];
  for (int j=0;jWidth; j++ )
  {
   p1[i][j]=ptr[j*3];
  }
 }
}    void he(Graphics::TBitmap *hBmp)
{
Byte *ptr;
float graylevel[256]={0};
int temp;                for(int i = 0; i < hBmp->Width ; i++)
                    for(int j = 0; j < hBmp->Height ; j++)
                    {
                        temp = p1[j][i];
                        graylevel[temp]++;
                }            for(int i = 0 ; i < 256 ; i++)
                graylevel[i]=(graylevel[i]/((hBmp->Width)*(hBmp->Height)));  
        
        for(int i = 1 ; i < 256 ; i++)
                graylevel[i]=graylevel[i]+graylevel[i-1];              for(int i = 0 ; i < 256 ; i++)
                graylevel[i]=graylevel[i]*255;            for(int i = 0; i < hBmp->Width; i++)
                    for(int j = 0; j < hBmp->Height; j++)
                {
                        temp=p1[j][i];                            p1[j][i] = int(graylevel[temp]);                    }
                for (int i=0;iHeight;i++ )
                {
                  ptr=(Byte*)hBmp->ScanLine[i];
                  for (int j=0;jWidth; j++ )
                  {
                   ptr[j*3]=p1[i][j];
                   ptr[j*3+1]=p1[i][j];
                   ptr[j*3+2]=p1[i][j];
                  }
                }
}    void __fastcall TForm1::N10Click(TObject *Sender)
{
 if(Image1->Picture->Bitmap->Empty==true)
 ShowMessage("請載入灰階圖檔!!");
 Graphics::TBitmap *Bmp = new Graphics::TBitmap();     Bmp->Assign(Image1->Picture->Bitmap);
 p1Pixel(Bmp);
 he(Bmp);
 Image2->Picture->Assign(Bmp);
 delete Bmp;
}    
發表人 - xdio2 於 2004/11/10 02:24:36
justdo
高階會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-10 20:25:19 IP:221.169.xxx.xxx 未訂閱
我測試編譯並沒有問題 警告訊息裡面說import.cpp 的第311行有問題,不知道是哪一行呢? 另外你的P1一次就要了4*1000*1000個byte,不是個好的作法 用動態的方式產生你需要的大小的陣列會比較適當 況且你後來指定的資料都是Byte型態的...根本用不著int 在想會不會是你存檔的時候把unit的檔名和project的檔名存成相同的了...
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-10 21:50:28 IP:61.59.xxx.xxx 未訂閱
引言: 我測試編譯並沒有問題 警告訊息裡面說import.cpp 的第311行有問題,不知道是哪一行呢? 另外你的P1一次就要了4*1000*1000個byte,不是個好的作法 用動態的方式產生你需要的大小的陣列會比較適當 況且你後來指定的資料都是Byte型態的...根本用不著int 在想會不會是你存檔的時候把unit的檔名和project的檔名存成相同的了...
多謝大大你的熱心回覆喔 小弟會去查查看是不是如你說的錯誤 再次感謝喔~ 謝謝~
系統時間:2024-06-08 0:35:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!