搞不太懂,TBITMAP 的 SCANLINE 不起作用了。。。
- C/C++ code
Graphics::TBitmap *bmpChar[12]; int len,chrWid,chrHei,drawpos(0); len=9; chrWid=10; chrHei=10; int i; for(i=0;i<len;i++) { if(i+1>len) { break; } bmpChar[i]=new Graphics::TBitmap(); bmpChar[i]->PixelFormat=pf24bit; bmpChar[i]->Width=chrWid; bmpChar[i]->Height=chrHei; bmpChar[i]->Canvas->Brush->Color=clBlack; bmpChar[i]->Canvas->Font->Color=clWhite; bmpChar[i]->Canvas->Font->Handle=hFont; bmpChar[i]->Canvas->TextOutA(0,0,strName.SubString(i+1,1)); //如果这里输出文字,下面的 p 就始终是 0 //bmpChar[i]->Assign(Image3->Picture->Bitmap); //如果使用这一句,下面的 p 就正常了,Image3里面是在设计阶段读入的一张图片 BYTE *p; p=(BYTE*)bmpChar[i]->ScanLine[0]; //这里的 p 始终,得不到正确的地址,始终是 0。。。。 }[解决办法]
用你的代码稍微试了一下,在BCB6下可以正确得到结果啊。
- C/C++ code
Graphics::TBitmap *bmpChar=new Graphics::TBitmap(); bmpChar->PixelFormat=pf24bit; bmpChar->Width=10; bmpChar->Height=10; bmpChar->Canvas->Brush->Color=clBlack; bmpChar->Canvas->Font->Color=clWhite; //bmpChar->Canvas->Font->Handle=hFont; bmpChar->Canvas->TextOutA(0,0,"Hello"); //如果这里输出文字,下面的 p 就始终是 0??? //bmpChar->Assign(Image3->Picture->Bitmap); //如果使用这一句,下面的 p 就正常了,Image3里面是在设计阶段读入的一张图片 BYTE *p; p=(BYTE*)bmpChar->ScanLine[5]; //正确~~ String s; for(int i=0; i<30; i++) { s = s + IntToHex(p[i],2) + " "; } Memo1->Text = s;
[解决办法]
- C/C++ code
for(i=0;i<bmp->Height;i++) { for(j=0;j<bmp->Width;j++) { if(*(p+i*line+j*3)==255) { this->Canvas->TextOutA(j*(wid+5),i*hei,"1"); } else if(*(p+i*line+j*3)==0) { this->Canvas->TextOutA(j*(wid+5),i*hei,"0"); } } }