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

利用水平投影和垂直投影將所寫的文字框出

尚未結案
andy122742
一般會員


發表:12
回覆:5
積分:3
註冊:2005-03-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-18 22:32:48 IP:59.114.xxx.xxx 未訂閱
想煩請各位先進,目前我的程式只要簽名的字不要垂直重疊就能正確的將其在Image1上寫的字框出,想了很久就是不知道那裡出了問題咧!煩請各位先見幫忙解答一下!謝謝!    
void __fastcall TForm1::N7Click(TObject *Sender)//這是一個400*400的Image1
{            byte *ptr;
        Image1->Picture->Bitmap->PixelFormat=pf24bit;
        for(int i=0;i<400;i++)
        {
                ptr=(Byte*)Image1->Picture->Bitmap->ScanLine[i];
                for(int j=0;j<400;j++){
                                hhww[i][j]=(ptr[j*3]+ptr[j*3+1]+ptr[j*3+2])/3;
                }
        }    }
void __fastcall TForm1::N11Click(TObject *Sender)
{
        int stemp=-1;//x紀錄投影數
        int ttemp=0;//y紀錄投影數
        int ww[400];//橫軸投影
        int **hh;//縱軸投影
        int cc[2][400];//橫軸投影座標
        int dd[2][400];//縱軸投影座標
        //給予初始值
        for(int i=0;i<400;i++){
           cc[0][i]=-1;
           cc[1][i]=-1;
           dd[0][i]=-1;
           dd[1][i]=-1;
           ww[i]=0;
        }
        for(int i=0;i<400;i++){//x軸投影
           for(int j=0;j<400;j++){
              if(hhww[i][j]==0){
                ww[j]=1;
              }
           }
        }            bool showtrue=true;
        for(int i=0;i<400;i++){
           if(ww[i]==1 && showtrue){//紀錄起始點座標
             stemp++;
             cc[0][stemp]=i;
             showtrue=false;
           }
           else if(ww[i]==0 && !showtrue){//紀錄結束點座標
             cc[1][stemp]=i-1;
             showtrue=true;
           }
        }            //動態配置
        hh = new int *[stemp+1];
        for(int i=0;iCanvas->Pen->Color = clRed;            for(int i=0;i<400;i++){
           if(cc[0][i] >=0 && dd[0][i] >=0 ){
              Image1->Canvas->MoveTo(cc[0][i]-1,dd[0][i]-1);
              Image1->Canvas->LineTo(cc[1][i]+1,dd[0][i]-1);                  Image1->Canvas->MoveTo(cc[0][i]-1,dd[0][i]-1);
              Image1->Canvas->LineTo(cc[0][i]-1,dd[1][i]+1);                  Image1->Canvas->MoveTo(cc[1][i]+1,dd[1][i]+1);
              Image1->Canvas->LineTo(cc[1][i]+1,dd[0][i]-1);                  Image1->Canvas->MoveTo(cc[1][i]+1,dd[1][i]+1);
              Image1->Canvas->LineTo(cc[0][i]-1,dd[1][i]+1);
           }
        }
正確的效果 垂直重疊失敗 煩請各位幫忙了!謝謝!
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-19 00:27:13 IP:218.168.xxx.xxx 未訂閱
您好:
看您的結果可以推斷您對[每個]垂直投影範圍只記錄[一個]水平投影範圍
          所以應該要對[每個]垂直投影範圍記錄[多個]水平投影範圍,之後再記錄一個(兩個木字相連的情況)或多個(兩個木字分開的情況)垂直投影範圍
順心
系統時間:2024-05-05 1:53:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!