图像的拷贝的问题 ( 积分: 20 )

  • 主题发起人 主题发起人 鸽子-
  • 开始时间 开始时间

鸽子-

Unregistered / Unconfirmed
GUEST, unregistred user!
从图像采集卡采集到的256灰度级byte数据(400*400),用image显示出来后如何将它还原成原来的byte数据。(我还原后,用txt显示出来后,就不是原来的数据了,请帮帮我)给个例子
 
从图像采集卡采集到的256灰度级byte数据(400*400),用image显示出来后如何将它还原成原来的byte数据。(我还原后,用txt显示出来后,就不是原来的数据了,请帮帮我)给个例子
 
Image.Picture.Bitmap.PixelFormat:=pf8bit;
试试
 
不知你是如何显示-还原-用txt的,给个例子
主要要说出和原来的有什么不同
 
兄弟:如果我没说错的话,图片是不可能在txt文件中显示的。
 
可以把Byte数据,按字节转换成文本,不就可以显示了。
事情是这样的:
我要实现指纹的核查比对,而指纹数据的来源有两种途径:1、采集卡取得指纹数据,取得后可以直接转换成特征数据。2、从扫描仪获得数据,但要转换成byte[400*400]的数据后,才能取得特征数据。
所以,我就先把采集卡取得的数据用image显示出来后,再把image的数据转换成byte[400*400]的数据,再取特征,但是提示获取特征失败。

我对图像处理不熟,还请各位帮帮忙。
 
可以先保存为二进制文件
 
这是我的源码(请帮忙看看);
Function GetFpImg(FpBmpImg:TBitMap;var FpImg:TFpImage):boolean;overload;
var
BmpInfo:^TBitmapInfo;
BmiHeader:tagBITMAPINFOHEADER;
mDC:HDC;
i,j:integer;
Bmp:TBitMap;
begin
Bmp:=TBitMap.Create;
Bmp.Assign(FpBmpImg);
Bmp.PixelFormat:=pf8bit;
Result:=false;
bmpInfo := AllocMem(SizeOf( TBitmapInfoHeader )+SizeOf(TRGBQuad)*256);
BmiHeader.biSize:=sizeof(BITMAPINFOHEADER);
BmiHeader.biWidth:=IMAGE_WIDTH;
BmiHeader.biHeight:=IMAGE_HEIGHT;
BmiHeader.biPlanes:=1;
BmiHeader.biBitCount:=8;
BmiHeader.biCompression:=0;
BmiHeader.biSizeImage:=0;
BmiHeader.biXPelsPerMeter:=0;
BmiHeader.biYPelsPerMeter:=0;
BmiHeader.biClrUsed:=256;
BmiHeader.biClrImportant:=0;
BmpInfo.BmiHeader:=BmiHeader;
for i:=0 to Image_height do
for j:=0 to image_height do
Fpimg[i,j]:=0;
for i := 0 to 255 do
begin
bmpInfo.bmiColors.rgbRed := byte(i);
bmpInfo.bmiColors.rgbGreen := byte(i);
bmpInfo.bmiColors.rgbBlue := byte(i);
bmpInfo.bmiColors.rgbReserved :=0 ;
end;
mDC:=GetDC(0);
I:=SetDIBits(mDC,bmp.Handle,0,IMAGE_HEIGHT,@Fpimg,BmpInfo^,DIB_RGB_COLORS);
if I=IMAGE_HEIGHT then Result:=true;
ReleaseDC(0,mDC);
FreeMem( bmpInfo );
bmp.Free;
end;

Function GetFpBmpImg(FpImg:TFpImage):TBitMap;
var
BitmapInfo:PBitmapInfo;
BmiHeader:tagBITMAPINFOHEADER;
infosize:integer;
I:integer;
begin
Result:=TBitmap.Create;
try
Result.Width:=IMAGE_WIDTH;
Result.Height:=IMAGE_HEIGHT;

Result.PixelFormat:=pf8bit;
infosize:=SizeOf(TBitmapInfoHeader)+SizeOf(TRGBQuad)*256;//对256色
getmem(BitmapInfo,infosize);
for i:=0 to 255 do
begin
BitmapInfo^.bmiColors.rgbBlue:=byte(i);
BitmapInfo^.bmiColors.rgbGreen:=byte(i);
BitmapInfo^.bmiColors.rgbRed:=byte(i);
BitmapInfo^.bmiColors.rgbReserved:=0;
end;

BmiHeader.biSize:=sizeof(BITMAPINFOHEADER);
BmiHeader.biWidth:=IMAGE_WIDTH;
BmiHeader.biHeight:=IMAGE_HEIGHT;
BmiHeader.biPlanes:=1;
BmiHeader.biBitCount:=8;
BmiHeader.biCompression:=0;
BmiHeader.biSizeImage:=0;
BmiHeader.biXPelsPerMeter:=0;
BmiHeader.biYPelsPerMeter:=0;
BmiHeader.biClrUsed:=256;
BmiHeader.biClrImportant:=0;
BitmapInfo.bmiHeader:=BmiHeader;
SetStretchBltMode(Result.Canvas.Handle,COLORONCOLOR);
StretchDIBits(Result.Canvas.Handle,
0,0,
IMAGE_WIDTH,IMAGE_HEIGHT,
0,0,
IMAGE_WIDTH,IMAGE_HEIGHT,
@Fpimg,
BitmapInfo^,
DIB_RGB_COLORS, // wUsage
SRCCOPY);
freemem(BitmapInfo);
except on E:exception do
Result.Free;
end;//end try
end;
 
变换成二值图像不行?
兄弟,你那里有细化 和 由于二值和细化由于指纹断线断裂再 连接起来的delphi算法
 
怎么不行?肯定有方法。
看来没有明白人,只能自己想办法了。
 
加个信息头,直接拷贝内容
 
后退
顶部