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

有關 Delphi 轉 BCB 的問題請求協助

答題得分者是:Zard
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-14 15:28:03 IP:218.19.xxx.xxx 未訂閱
有關 Delphi 轉 BCB 的問題請求協助    大家好:    我前兩天在 K.Top 找尋參考資料時,找到一篇舊文 (http://delphi.ktop.com.tw/topic.php?topic_id=26180) 裡邊提到有關擷取圖檔 Exif 資訊中的縮圖資料,該文裡有一篇是由熱心的 cmf 參考至另一篇 (http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21809) 舊文,將 Delphi 撰寫的程式碼轉譯為 BCB 的語法,我將該段程式碼複製下來做測試,但編譯時產生多處錯誤,雖然我試著做了一些修改,卻礙於對 Delphi 的語法不瞭解,無法順利解決所有問題,因此想請 K.Top 上的先進們幫幫忙,看看產生錯誤的部份應如何修正? 我修改過後的程式如下 (為便於觀看,我已將原來的註釋資料清除):

void BGR2RGB(Graphics::TBitmap* bmp)
{
        int x,y;
        char t;
        PCHAR data;            y=bmp->Height-1 ;
        while(y>=0){
                // 下列這行會產生 E2034 Cannot convert 'void *' to 'char *' 的錯誤
                data=bmp->ScanLine[y];
                for(x=0 ;x<=bmp->Width-1 ; x++){
                        t=data[x*3];
                        data[x*3]=data[x*3+2];
                        data[x*3+2]=t;
                }
                y--;
        }
}
//-----------------------------------    //Graphics::TBitmap LoadThumb(AnsiString filename)
void LoadThumb(AnsiString filename, Graphics::TBitmap *bmp)
{
        TFileStream *fstream;
        WORD j,i;
        PCHAR data;
        BYTE buf[4];
        WORD *p;            fstream = new TFileStream(filename, fmOpenRead);            fstream->Seek(20, soFromBeginning);
        fstream->Read(buf, sizeof(buf));            p=(WORD*)buf;            // 下列有三處會產生 E2188 Expression Syntax 的錯誤
        // 原來的 Delphi 碼為 if PWORD(@buf[0])^=$EDFF then 
        if(p* == 0xEDFF){
                j=buf[2]*256+buf[3];
                if(j >= 1024){
                        TMemoryStream *mstream = new TMemoryStream;
                        mstream->CopyFrom(fstream,j);
                        data=(char*)mstream->Memory;                            for(i=300; i<=700; i++){
                                p=(WORD*)&data[i];
                                if(p* == 0xD8FF){
                                        break;
                                }                                    if(i<700){
                                        TJPEGImage *fjpg = new TJPEGImage;
                                        mstream->Position=i;
                                        fjpg->LoadFromStream(mstream);
                                        bmp->Assign(fjpg);
                                        p=(WORD*)&data[i+57];
                                        if(*p == 0x2E34){
                                                BGR2RGB(bmp);
                                        }
                                        delete fjpg;
                                }
                                delete mstream;
                                mstream = NULL;
                        }
                }
        }
        delete fstream;
        fstream = NULL;
}
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-14 17:51:24 IP:210.243.xxx.xxx 未訂閱
紅字處
//---------------------------------------------------------------------------
void BGR2RGB(Graphics::TBitmap* bmp)
{
        int x,y;
        char t;
        PCHAR data;            y=bmp->Height-1 ;
        while(y>=0){
                data=(char*)bmp->ScanLine[y];
                for(x=0 ;x<=bmp->Width-1 ; x  ){
                        t=data[x*3];
                        data[x*3]=data[x*3 2];
                        data[x*3 2]=t;
                }
                y--;
        }
}
//-----------------------------------    //Graphics::TBitmap LoadThumb(AnsiString filename)
void LoadThumb(AnsiString filename, Graphics::TBitmap *bmp)
{
        TFileStream *fstream;
        WORD j,i;
        PCHAR data;
        BYTE buf[4];
        WORD *p;            fstream = new TFileStream(filename, fmOpenRead);            fstream->Seek(20, soFromBeginning);
        fstream->Read(buf, sizeof(buf));            p=(WORD*)buf;            if(*p == 0xEDFF){
                j=buf[2]*256 buf[3];
                if(j >= 1024){
                        TMemoryStream *mstream = new TMemoryStream;
                        mstream->CopyFrom(fstream,j);
                        data=(char*)mstream->Memory;                            for(i=300; i<=700; i  ){
                                p=(WORD*)&data[i];
                                if(*p == 0xD8FF){
                                        break;
                                }                                    if(i<700){
                                        TJPEGImage *fjpg = new TJPEGImage;
                                        mstream->Position=i;
                                        fjpg->LoadFromStream(mstream);
                                        bmp->Assign(fjpg);
                                        p=(WORD*)&data[i 57];
                                        if(*p == 0x2E34){
                                                BGR2RGB(bmp);
                                        }
                                        delete fjpg;
                                }
                                delete mstream;
                                mstream = NULL;
                        }
                }
        }
        delete fstream;
        fstream = NULL;
}    
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-14 21:38:41 IP:218.19.xxx.xxx 未訂閱
雖然就是那麼簡單,但是會不會就實在真的差很多了,多謝 Zard 的協助。
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-14 23:47:11 IP:218.175.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=56748
系統時間:2024-10-01 15:52:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!