把数据从Pbyte读取到stream的问题
首先是一个调用一个指纹设备的api
int SFEP_GetLiveImage( PBYTE *p_pImageBuffer ) //从指纹采集器获取一幅图像并返回保存图像的地址。
在delphi中我是这样实现的
function SFEP_GetLiveImage(p_pImageBuffer: PByte): integer; stdcall external 'xxx.dll';
var
PByt,PPbyte: Pbyte;
PPbyte := @pByt;
SFEP_GetLiveImage(PPbyte);
Stream.Position := 0;
Stream.Writebuffer(pByt,sizeof(pByt));
Stream.Position := 0;
DeleteFile(ExtractFilePath(ParamStr(0))+'aaa.BMP');
Stream.SaveToFile(ExtractFilePath(ParamStr(0))+'aaa.BMP');
在得到p_pImageBuffer之后 我想通过stream加载该数据,然后再由加载到bmp中, 然后把图片显示出来,但是总是得不到图片。
希望哪位大仙能帮我看一下
[解决办法]
sizeof(pByt),可不是流的长度,而是指针类型长度,4字节
[解决办法]
>>首先是一个调用一个指纹设备的api
>>int SFEP_GetLiveImage( PBYTE *p_pImageBuffer ) //从指纹采集器获取一幅图像并返回保存图像的地址。
应该还有一个能够获得图片大小的函数吧,只知道指针还不够
[解决办法]
学习中.............
[解决办法]
缺少缓冲区长度参数
function SFEP_GetLiveImage(p_pImageBuffer: PByte; Bufferlen: integer): integer; stdcall external 'xxx.dll';
两种可能 要么是少了长度参数 ,要么是函数返回长度
var
PByt,PPbyte: Pbyte;
Stream: Tmemorystream;
begin
//PPbyte := @pByt;
//如果函数返回长度
Bufferlen := SFEP_GetLiveImage(Pbyte);
Stream:= Tmemorystream.Create;
Stream.Position := 0;
Stream.Writebuffer(@pByt[0],Bufferlen);
DeleteFile(ExtractFilePath(ParamStr(0))+'aaa.BMP');
Stream.SaveToFile(ExtractFilePath(ParamStr(0))+'aaa.BMP');
[解决办法]
Stream.Writebuffer(pByt,sizeof(pByt));
第二个参数改为缓冲区的长度,600*400*位深(1:位;3:24位;4:32位);
[解决办法]
把指纹机的输出函数,研究一下,看还有什么内容
[解决办法]
按照 600*400*1(8位位图) 计算尺寸
[解决办法]