19,468
社区成员
发帖
与我相关
我的任务
分享
BOOL CImageProcessor::SaveFile24(HANDLE hFile)
{
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
memset(&bmfh, 0, sizeof(bmfh));
memset(&bmih, 0, sizeof(bmih));
int nBitmapSize = abs(m_bmih.biHeight) * WIDTHBYTES(m_bmih.biWidth * 24);
bmfh.bfType = 'MB';
bmfh.bfOffBits = sizeof(bmfh) + sizeof(bmih);
bmfh.bfSize = bmfh.bfOffBits + nBitmapSize;
bmih.biSize = sizeof(bmih);
bmih.biWidth = m_bmih.biWidth;
bmih.biHeight = m_bmih.biHeight;
bmih.biPlanes = 1;
bmih.biBitCount = 24;
bmih.biCompression = BI_RGB;
bmih.biSizeImage = nBitmapSize;
BYTE *pData = new BYTE[nBitmapSize];
memset(pData, 0, nBitmapSize);
BYTE *pR = m_pR;
BYTE *pG = m_pG;
BYTE *pB = m_pB;
for(int j = 0; j < abs(bmih.biHeight); j++)
{
BYTE *pTemp = pData + WIDTHBYTES(bmih.biWidth * 24) * j;
for(int i = 0; i < bmih.biWidth; i++)
{
*pTemp++ = *pB++;
*pTemp++ = *pG++;
*pTemp++ = *pR++;
}
}
DWORD dwByteWritten = 0;
::WriteFile(hFile, &bmfh, sizeof(bmfh), &dwByteWritten, NULL);
::WriteFile(hFile, &bmih, sizeof(bmih), &dwByteWritten, NULL);
::WriteFile(hFile, pData, nBitmapSize, &dwByteWritten, NULL);
delete[] pData;
return TRUE;
}