用指纹采集设备采集了裸图形数据文件,如何让它在TImage中显示成指纹图形(300分)

  • 主题发起人 主题发起人 whsunbin
  • 开始时间 开始时间
如果你用u are u,我可以给你一套源程序
 
我显示图形的程序如下:
hdc:为Image1.Canvas.Handle
Image:为采集到的指纹数据
Cols,Rows为指纹设备的大小
程序运行后不会显示任何图形,而且为什么加上程序中注释掉的部分,程序就会报错。
请各位指点。

procedure TForm1.PrintBitmap2(var hdc: Integer; image: Pointer; cols,
rows: Integer);
Var
bi:TBitMapInfo;
Palette_Size:Integer;
di:Integer;
i:Integer;
begin
Palette_Size:=256;
bi.bmiHeader.biSize:=SizeOf(TBitMapInfo);
bi.bmiHeader.biPlanes:=1;
bi.bmiHeader.biBitCount:=8;
bi.bmiHeader.biCompression:=BI_RGB;
bi.bmiHeader.biSizeImage:=0;
bi.bmiHeader.biXPelsPerMeter:=0;
bi.bmiHeader.biYPelsPerMeter:=0;
bi.bmiHeader.biClrUsed:=Palette_Size;
bi.bmiHeader.biClrImportant:=0;
bi.bmiHeader.biWidth:=Cols;
bi.bmiHeader.biHeight:=-Rows;
//ShowMEssage(VarToStr(hdc));
bi.bmiColors[0].rgbBlue:=0;
bi.bmiColors[0].rgbGreen:=0;
bi.bmiColors[0].rgbRed:=0;
bi.bmiColors[0].rgbReserved:=0;

{
For i:=0 to Palette_size-1 do
Begin
bi.bmiColors.rgbBlue:=1;
bi.bmiColors.rgbGreen:=1;
bi.bmiColors.rgbRed:=1;
bi.bmiColors.rgbReserved:=0;
End;
}
//ShowMEssage(VarToStr(hdc));
di:=StretchDIBits(hdc, 0, 0, Image1.Width,Image1.Height,0,0,cols,rows,image, bi, DIB_RGB_COLORS, SRCCOPY)
End;
 
我做过,简单。
需要你仔细研究一下BMP的文件格式,自己为你的图形数据加上BMP头(包括调色板)。
我有C++Builder的程序码。
 
能详细的吗?
 
你从传感器得到的数据应该是滤波之后的。加上Bmp头结构就行了。
图形数据组图
void FingerDataToBmpFile(BYTE *mybits, BITMAPINFO *mybmi)
{ //mybits, mybmi 就是使用GetImageInfo从
//传感器取入的指纹图像数据部分和BITMAPINFO结构。这样组成的
//是原始图象。
FILE *fp;
fp = fopen(".//Test.bmp","wb");
BITMAPFILEHEADER bfh;
// Construct the file header.
bfh.bfType = 0x4D42; // 'BM'
bfh.bfSize =
sizeof(BITMAPFILEHEADER) +
sizeof(BITMAPINFOHEADER) +
256 * sizeof(RGBQUAD) +
300*300;
bfh.bfReserved1 = 0;
bfh.bfReserved2 = 0;
bfh.bfOffBits =
sizeof(BITMAPFILEHEADER) +
sizeof(BITMAPINFOHEADER) +
256 * sizeof(RGBQUAD);
// Write the file header.
int iSize = sizeof(bfh);
fwrite(&bfh,iSize,1,fp);
// Write the BITMAPINFO structure.
// Note: we assume that there are always 256 colors in the
// color table.
if (mybmi == NULL)
{
printf("/nBITMAPINFO is NULL./n");
return;
}
iSize = sizeof(BITMAPINFOHEADER) +
256 * sizeof(RGBQUAD);
fwrite(mybmi, iSize, 1, fp);
// Write the bits.
iSize = 300*300; //大小300*300
fwrite(mybits, iSize, 1, fp);
fclose(fp);
return;
}

 
还有我是把它封装成dll的,然后在Delphi里调用。
直接用Image来loadfromfile就形了。
应该不是u r u吧,它是可以直接得到图象文件的。
 
To:GanQuan
我对VC++不太熟悉,请问在Delphi下如何实现呢?
 
封装成Dll挺简单的,随便一本讲Vc的书都有,照样子做就行了。
要不就需要把这段代码转成Delphi的。写文件就用FileStream来写,其他的Bmp结构
在Delphi中都有对应的,查查帮助。
不过需要你从传感器中能够得到所需的两个参数数据,如果你的传感器录入的数据是
其他结构,这段代码没有用,就需要想其他方法了。
 
如果用 veridicom的直接调getimage就行了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
815
DelphiTeacher的专栏
D
后退
顶部