救命啊!下面VC代码(位图数据保存为BMP文件)如何用DELPHI实现?在线等
已有位图数据,8位灰度,将数据加上BMP文件头保存到文件中。问用DELPHI如何实现?
void CComCtrl::GetPicture(LPWSTR lpwEncapsulateData, DWORD dwEncapsulateDataLen)
{
lpwEncapsulateData += 2;
dwEncapsulateDataLen -= 6;
std::auto_ptr<BITMAPINFO> pBitmapInfo (new BITMAPINFO);
BITMAPFILEHEADER BFH;
::FillMemory((PVOID)&BFH, (DWORD)sizeof(BITMAPFILEHEADER) ,0);
CFileDialog FileDialog( FALSE,"bmp",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"摄像机图像文件(*.bmp)|*.bmp||",NULL);
if(FileDialog.DoModal()==IDOK)
{
CFile ToFile;
BeginWaitCursor();
BFH.bfType = 0x4d42;//文件头内容
BFH.bfSize = 0x051036;
BFH.bfOffBits = 0X036;
pBitmapInfo->bmiHeader.biSize = 0x028;
pBitmapInfo->bmiHeader.biWidth = 0x0180;
pBitmapInfo->bmiHeader.biHeight = 0x0120;
pBitmapInfo->bmiHeader.biPlanes = 0x01;
pBitmapInfo->bmiHeader.biBitCount = 0x018;
pBitmapInfo->bmiHeader.biCompression = 0;
pBitmapInfo->bmiHeader.biSizeImage = 0x051000;
pBitmapInfo->bmiHeader.biXPelsPerMeter = 0x0ec4;
pBitmapInfo->bmiHeader.biYPelsPerMeter = 0x0ec4;//文件头内容结束
if( ToFile.Open( FileDialog.GetPathName(),CFile::modeCreate|CFile::modeReadWrite ) )
{
ToFile.Write(&BFH, sizeof( BITMAPFILEHEADER ));
if(pBitmapInfo->bmiHeader.biHeight>0)
pBitmapInfo->bmiHeader.biHeight=0-pBitmapInfo->bmiHeader.biHeight;
//使图像倒过来
ToFile.Write(&pBitmapInfo->bmiHeader, sizeof (BITMAPINFOHEADER));
for(int i = 0; i < (int)(dwEncapsulateDataLen/2); i++ )
{//对返回的384*288个图像数据灰度进行存储。
BYTE ucGrey = ((*(lpwEncapsulateData+i))>>8);
for(int j=0;j<3;j++)
ToFile.Write(&ucGrey, sizeof(BYTE));
ucGrey = LOBYTE(*(lpwEncapsulateData+i));
for(j=0;j<3;j++)
ToFile.Write(&ucGrey, sizeof(BYTE));
}
ToFile.Close();
}
EndWaitCursor();
}