读书人

把数据从Pbyte读取到stream的有关问题

发布时间: 2012-03-20 14:01:11 作者: rapoo

把数据从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位位图) 计算尺寸
[解决办法]

探讨
把指纹机的输出函数,研究一下,看还有什么内容

[解决办法]
探讨
引用:
Stream.Writebuffer(pByt,sizeof(pByt));
第二个参数改为缓冲区的长度,600*400*位深(1:位;3:24位;4:32位);


这个缓冲区的长度不是很明白 我这里应该怎么的得到

[解决办法]
被采集图像的大小为 IMAGE_WIDTH*IMAGE_HEIGHT 。
这里不是写了么?看来应该是灰度图,就是位深是8位的,也就是每个像素占一个字节。600*400;

读书人网 >.NET

热点推荐