求助大侠,一段C++ 代码翻译
void Hello(HBITMAP hBitmap ,TCHAR **pBarCode, INT *nXPos, INT *nYPos, INT *nBarcodeCount, INT nScanIndex)
{
//AfxMessageBox(*pBarCode);
//*nBarcodeCount = 3; //2 后出,3 前出
LPBYTE lpByte=(LPBYTE)GlobalLock(hBitmap); //2009.12.22 Jerry Modified by oscar 2009.12.30
LPBITMAPINFOHEADER lpHeader=(LPBITMAPINFOHEADER)lpByte;
DWORD nImageSize=(lpHeader->biWidth*lpHeader->biBitCount+31)/32*4*lpHeader->biHeight;
INT nColor=lpHeader->biBitCount>8?0:(1<<lpHeader->biBitCount);
BITMAPFILEHEADER bh;
bh.bfReserved1=0;
bh.bfReserved2=0;
bh.bfType=0x4d42;
bh.bfSize=nImageSize+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+nColor*sizeof(RGBQUAD);
bh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+nColor*sizeof(RGBQUAD);
CString strFileName;
CFile m_theFile;
if ((*nBarcodeCount)>0)
strFileName.Format(_T("test\\%s.bmp"), /**pBarCode+0*/_T("Oscar"));
else
strFileName.Format(_T("test\\0000000000_%08d.bmp"),time(0));
strFileName=strFileName;
if(m_theFile.Open(strFileName,CFile::modeCreate|CFile::modeWrite))
{
m_theFile.Write(&bh,sizeof(BITMAPFILEHEADER));
DWORD dwSize = sizeof(BITMAPINFOHEADER)+nColor*sizeof(RGBQUAD)+nImageSize;
DWORD dwPosition = 0;
DWORD dwWrite = 0;
while(1)
{
if ((dwSize - dwPosition) >= 1024)
dwWrite = 1024;
else
dwWrite = dwSize - dwPosition;
m_theFile.Write(lpByte + dwPosition, dwWrite);
dwPosition += dwWrite;
if (dwPosition == dwSize)
break;
}
m_theFile.Close();
}
GlobalUnlock(hBitmap);
return ;
}