求翻译C++代码为Delphi(保存文件100分)
void CDemoDlg::OnBnClickedBtnCapture()
{
int ret = 0, nWidth = 0, nHeight = 0;
unsigned char buffer[IDFP_IMG_WIDTH*IDFP_IMG_HEIGHT + 1078] = {0};
LIVESCAN_BeginCapture(0);
if((ret = LIVESCAN_GetFPBmpData(0, buffer)) > 0)
{
BITMAPFILEHEADER *bmpfheader = (BITMAPFILEHEADER *)buffer;
BITMAPINFO *bmpinfo = (BITMAPINFO *)(((char*)bmpfheader) + 14);
nWidth = bmpinfo->bmiHeader.biWidth;
nHeight = bmpinfo->bmiHeader.biHeight;
HBITMAP hb = BuildImage(buffer + 1078, bmpinfo->bmiHeader.biWidth, bmpinfo->bmiHeader.biHeight);
GetDlgItem(IDC_STATIC_IMAGE)->SendMessage(STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hb);
DeleteObject(hb);
hb = NULL;
SaveToFile("image.bmp", buffer, IDFP_IMG_WIDTH*IDFP_IMG_HEIGHT+1078);
SetDlgItemText(IDC_EDT_INFO, "采集图像成功");
}
else
{
LIVESCAN_GetErrorInfo(ret, pszErrorInfo);
str.Format("采集图像失败, %s", pszErrorInfo);
SetDlgItemText(IDC_EDT_INFO, str);
}
LIVESCAN_EndCapture(0);
}
procedure TForm1.btn1Click(Sender: TObject);
var
i, ret, nWidth, nHeight: Integer;
buffer: PAnsiChar;
f: file;
aa: TOFStruct;
b: array of Byte;
s: string;
tf: TFileStream;
begin
GetMem(buffer, IDFP_IMG_WIDTH * IDFP_IMG_HEIGHT + 1078);
LIVESCAN_BeginCapture(0);
ret := LIVESCAN_GetFPBmpData(0, buffer);
if ret > 0 then
begin
try
//到这里就翻译不下去了,尝试好多种方法,无能为力。这时候的buffer是有值的,打印出来可以。
except
on e: Exception do
begin
ShowMessage(e.Message);
end;
end;
lst1.Items.Text := '采集图像成功!';
end
else
begin
LIVESCAN_GetErrorInfo(ret, pszErrorInfo);
ShowMessage(pszErrorInfo);
end;
end;
int SaveToFile(const char *fileName, void *buffer, int size)
{
FILE *f=fopen(fileName, "wb");
if(f==NULL)
{
printf("Open file %s to write fail.\n", fileName);
return 0;
}
fwrite(buffer, size, 1, f);
fclose(f);
return 1;
}