有關 Delphi 轉 BCB 的問題請求協助 |
答題得分者是:Zard
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
有關 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 發送簡訊給我 |
紅字處
//--------------------------------------------------------------------------- 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 發送簡訊給我 |
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |