void CHKVisionDlg::OnCapimage() 
{
// TODO: Add your control notification handler code here
UCHAR imageBuf[704 * 576*2];
DWORD Size = 704 * 576*2;
UCHAR *imageBuffer=new UCHAR[Size];
char fileName[256];
CTime m_StartTime1=CTime::GetCurrentTime();
CString csStartTime=m_StartTime1.Format("%Y%m%d%H%M%S");
int ret;
int jpegQuality=100;

{
//capture BMP picture
TRACE("start original image cap\n");
sprintf(fileName, "ch%02d_%s.bmp", iLastSelect,csStartTime);
GetOriginalImage(ChannelHandle[iLastSelect], imageBuf, &Size);
if(Size == 704  *576 * 2)
SaveYUVToBmpFile(fileName, imageBuf, 704, 576);
else if(Size == 704 * 480* 2)
SaveYUVToBmpFile(fileName, imageBuf, 704, 480);
if(Size == 352  *288 * 2)
SaveYUVToBmpFile(fileName, imageBuf, 352, 288);
else if(Size == 352 * 240* 2)
SaveYUVToBmpFile(fileName, imageBuf, 352, 240);
if(Size == 176  *144 * 2)
SaveYUVToBmpFile(fileName, imageBuf, 176, 144);
else if(Size == 176 * 120* 2)
SaveYUVToBmpFile(fileName, imageBuf, 176, 120);

//capture jpg picture
if(!imageBuffer)
return;
Size = 704 * 576*2;
int ret=GetJpegImage(ChannelHandle[iLastSelect],imageBuffer,&Size,jpegQuality);
if(ret==0)
{
CString str;
str.Format("ch%02d_%s.jpg",iLastSelect,csStartTime);
FILE *pFile=fopen(str.GetBuffer(0),"wb");
if(pFile)
{
fwrite(imageBuffer,Size,1,pFile);
fclose(pFile);
}
else
AfxMessageBox("Can not open JPEG file!");
}
else if(ret==ERR_OUTOF_MEMORY)
AfxMessageBox("Not enough memory to store bitstream! \n or \n Image is too complex!");
else if(ret==ERR_WAIT_TIMEOUT)
AfxMessageBox("System is too busy!");
delete []imageBuffer;
Sleep(10);
}
}

解决方案 »

  1.   

    老大 你这个函数本身有问题吧,我只做了一部分procedure OnCapimage();
    const
      SIZE = 704*576*2;
    type
      imageBuf = Array [0..SIZE-1] of Byte;
    var
      pImageBuffer: ^imageBuf;
      m_StartTime1: TDateTime;
      fileName, stmp: string;
      csStartTime: String;
      ret: Integer;
      jpegQuality: Integer;
    begin
      m_StartTime1 := Now;
      csStartTime := FormatDateTime('YYYYmmDDHHMMSS', m_StartTime1);
      jpegQuality := 100;  stmp := IntToStr(iLastSelect);  if Length(stmp) < 1 then stmp := '0'+stmp;  filename := format('ch%s_%s.bmp', [stmp, csStartTime]);
      GetOriginalImage(ChannelHandle[iLastSelect], imageBuf, @Size);  if (Size = 704  *576 * 2) then SaveYUVToBmpFile(fileName, imageBuf, 704, 576);
      else if (Size = 704 * 480* 2) then SaveYUVToBmpFile(fileName, imageBuf, 704, 480);  if (Size = 352  *288 * 2) then SaveYUVToBmpFile(fileName, imageBuf, 352, 288);
      else if(Size = 352 * 240* 2) then SaveYUVToBmpFile(fileName, imageBuf, 352, 240);  if (Size = 176  *144 * 2) then SaveYUVToBmpFile(fileName, imageBuf, 176, 144);
      else if (Size = 176 * 120* 2) then SaveYUVToBmpFile(fileName, imageBuf, 176, 120);
      

  2.   

    UCHAR imageBuf[704 * 576*2];
    DWORD Size = 704 * 576*2;
    THandle THandle0;
    GetOriginalImage(THandle0, imageBuf, &Size);
    //GetOriginalImage 返回Imagebuf和Size,以下为VC的声明int GetOriginalImage(HANDEL hChannelHandle, UCHAR *ImageBuf, ULONG *Size); 
      

  3.   

    把这段翻译出来就ok了UCHAR imageBuf[704 * 576*2];
    DWORD Size = 704 * 576*2;
    THandle THandle0;
    GetOriginalImage(THandle0, imageBuf, &Size);
    //GetOriginalImage 返回Imagebuf和Size,以下为VC的声明int GetOriginalImage(HANDEL hChannelHandle, UCHAR *ImageBuf, ULONG *Size);