BMP象素读取后用0和#显示不正常BMP图,24位色,宽x高:60x30代码如下:C/C++ codeIdHttp-Get(url,html)TJPEG
BMP象素读取后用0和#显示不正常
BMP图,24位色,宽x高:60x30
代码如下:
C/C++ codeIdHttp->Get(url,html);TJPEGImage *jpg=new TJPEGImage;html->Position=0;jpg->LoadFromStream(html);Graphics::TBitmap *bmp=new Graphics::TBitmap();bmp->Assign(jpg);int height=bmp->Height;int width=bmp->Width;int bit[30][60];TColor c;int row,col,k;for (row=0;row<height;row++) for (col=0;col<width;col++) { c=bmp->Canvas->Pixels[row][col]; k=GetBValue(c); if (k==255) bit[height-row-1][col]=1; else bit[height-row-1][col]=0; }AnsiString bit01;for(row=0;row<height;row++){ bit01=""; for(col=0;col<width;col++) if (bit[row][col]==1) bit01=bit01+"#"; else bit01=bit01+"0"; Memo1->Lines->Add(bit01);}
比如图片数字是:5584,读取显示如下:
0000000#00000#####000000000000##############################
0000000#0000##00####0000000000##############################
0000000##00##00000###000000000##############################
0000000##00##000000##000000000##############################
0000000##00##00#0000#000000000##############################
0000000###00#0000000#000000000##############################
0000000#######00000##000000000##############################
00000000000###000####000000000##############################
0000000000000#000###0000000000##############################
00000000000000000#000000000000##############################
0000000#00#0000000000000000000##############################
0000000##0000####0000000000000##############################
0000000##000#######00000000000##############################
0000#00##00###0000##0000000000##############################
000#000##00##000000##000000000##############################
000#000##000#000000##000000000##############################
0000000##000#0000000#000000000##############################
0000000######000000##000000000##############################
000000000#####00000##000000000##############################
0000000000000#000###0000000000##############################
00000#00000000000##00000000000##############################
000#00000000000000000000000000##############################
000000000000000000000000000000##############################
000000000000000000000000000000##############################
0000000000000000000##000000000##############################
000000000000000000000000000000##############################
000000000000000000000000000000##############################
000000000000000000000000000000##############################
000000000000000000000000000000##############################
000000000000000000000000000000##############################
怎么这样??
[解决办法]可能是宽/高混了,我的测试,你参考一下:
C/C++ codevoid __fastcall TForm1::Button1Click(TObject *Sender){Graphics::TBitmap *bmp=new Graphics::TBitmap();bmp->Width=60;bmp->Height=30;TRect rec(0,0,60,30);bmp->Canvas->Font->Height=30;bmp->Canvas->TextRect(rec,0,0,"5584");Image1->Picture->Bitmap->Assign(bmp); //输出图像看一下int height=bmp->Height;int width=bmp->Width;int bit[60][30];TColor c;int row,col,k;for (row=0;row<width;row++) for (col=0;col<height;col++) { c=bmp->Canvas->Pixels[row][col]; k=GetBValue(c); if (k==255) bit[row][col]=1; else bit[row][col]=0; }AnsiString bit01;for(col=0;col<height;col++){ bit01=""; for(row=0;row<width;row++) if (bit[row][col]==1) bit01=bit01+"#"; else bit01=bit01+"0"; Memo1->Lines->Add(bit01);}}
[解决办法]
除了2楼说的原因外,还有一个关键问题,就是楼主使用的是JPEG格式图像文件,而并非标题所说的BMP格式,JPEG文件因为压缩和解压的关系,造成了颜色的“不纯”,因此光靠if (k==255)来判断白色是不准确的,应该给一个误差范围,如if (k >= 255 - 32),32就是误差范围