求翻译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;}