代码如下:
IdHttp->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##############################
怎么这样??
5 个解决方案
#1
为何只能获取前边两个数字数据,并且倒过来显示?
#2
可能是宽/高混了,我的测试,你参考一下:
结果是OK的
void __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);
}
}
结果是OK的
#3
除了2楼说的原因外,还有一个关键问题,就是楼主使用的是JPEG格式图像文件,而并非标题所说的BMP格式,JPEG文件因为压缩和解压的关系,造成了颜色的“不纯”,因此光靠if (k==255)来判断白色是不准确的,应该给一个误差范围,如if (k >= 255 - 32),32就是误差范围
#4
感谢各位..特别感谢keiy,确实是宽高搞错了..
#5
maozefa,我不是判断白色,我取组成颜色的蓝色值我有用处的.
#1
为何只能获取前边两个数字数据,并且倒过来显示?
#2
可能是宽/高混了,我的测试,你参考一下:
结果是OK的
void __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);
}
}
结果是OK的
#3
除了2楼说的原因外,还有一个关键问题,就是楼主使用的是JPEG格式图像文件,而并非标题所说的BMP格式,JPEG文件因为压缩和解压的关系,造成了颜色的“不纯”,因此光靠if (k==255)来判断白色是不准确的,应该给一个误差范围,如if (k >= 255 - 32),32就是误差范围
#4
感谢各位..特别感谢keiy,确实是宽高搞错了..
#5
maozefa,我不是判断白色,我取组成颜色的蓝色值我有用处的.