static void GenBmpFileHeader( void* pBmpHeader, int nWidth, int nHeight, int nBit )
{
int nDataSize = nWidth * nHeight * nBit / 8; // Bytes
if (nWidth * nHeight * nBit % 8 != 0)
nDataSize++; BITMAPFILEHEADER* pBmpFileHeader = (BITMAPFILEHEADER*) pBmpHeader;
pBmpFileHeader->bfType = *((WORD*)"BM");
pBmpFileHeader->bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nDataSize;
pBmpFileHeader->bfReserved1 = 0;
pBmpFileHeader->bfReserved2 = 0; pBmpFileHeader->bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
+ 1024; BITMAPINFOHEADER* pBmpInfoHeader = (BITMAPINFOHEADER*) (pBmpFileHeader+1);
pBmpInfoHeader->biSize = sizeof(BITMAPINFOHEADER);
pBmpInfoHeader->biWidth = nWidth;
pBmpInfoHeader->biHeight = nHeight;
pBmpInfoHeader->biPlanes = 1;
pBmpInfoHeader->biBitCount = nBit;
pBmpInfoHeader->biCompression = 0;
pBmpInfoHeader->biSizeImage = nDataSize;
pBmpInfoHeader->biXPelsPerMeter = 0;
pBmpInfoHeader->biYPelsPerMeter = 0; pBmpInfoHeader->biClrUsed = 256;
pBmpInfoHeader->biClrImportant = 0x21b0b;
}
{
int nDataSize = nWidth * nHeight * nBit / 8; // Bytes
if (nWidth * nHeight * nBit % 8 != 0)
nDataSize++; BITMAPFILEHEADER* pBmpFileHeader = (BITMAPFILEHEADER*) pBmpHeader;
pBmpFileHeader->bfType = *((WORD*)"BM");
pBmpFileHeader->bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nDataSize;
pBmpFileHeader->bfReserved1 = 0;
pBmpFileHeader->bfReserved2 = 0; pBmpFileHeader->bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
+ 1024; BITMAPINFOHEADER* pBmpInfoHeader = (BITMAPINFOHEADER*) (pBmpFileHeader+1);
pBmpInfoHeader->biSize = sizeof(BITMAPINFOHEADER);
pBmpInfoHeader->biWidth = nWidth;
pBmpInfoHeader->biHeight = nHeight;
pBmpInfoHeader->biPlanes = 1;
pBmpInfoHeader->biBitCount = nBit;
pBmpInfoHeader->biCompression = 0;
pBmpInfoHeader->biSizeImage = nDataSize;
pBmpInfoHeader->biXPelsPerMeter = 0;
pBmpInfoHeader->biYPelsPerMeter = 0; pBmpInfoHeader->biClrUsed = 256;
pBmpInfoHeader->biClrImportant = 0x21b0b;
}
windows;
type
PBITMAPFILEHEADER = ^BITMAPFILEHEADER;
procedure GenBmpFileHeader(pBmpHeader: Pointer; nWidth, nHeight, nBit :Integer);
var
nDataSize: integer;
pBmpFileHeader: PBITMAPFILEHEADER;
pBmpInfoHeader: PBITMAPINFOHEADER;
begin
nDataSize := nWidth * nHeight * nBit div 8; // Bytes if( nWidth * nHeight * nBit mod 8) <> 0 then
Inc(nDataSize); pBmpFileHeader := PBITMAPFILEHEADER(pBmpHeader);
pBmpFileHeader^.bfType := PWORD(PChar('BM'))^;
pBmpFileHeader^.bfSize := sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nDataSize;
pBmpFileHeader^.bfReserved1 := 0;
pBmpFileHeader^.bfReserved2 := 0; pBmpFileHeader^.bfOffBits := sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 1024; pBmpInfoHeader := PBITMAPINFOHEADER(Integer(pBmpFileHeader)+1);
pBmpInfoHeader^.biSize := sizeof(BITMAPINFOHEADER);
pBmpInfoHeader^.biWidth := nWidth;
pBmpInfoHeader^.biHeight := nHeight;
pBmpInfoHeader^.biPlanes := 1;
pBmpInfoHeader^.biBitCount := nBit;
pBmpInfoHeader^.biCompression := 0;
pBmpInfoHeader^.biSizeImage := nDataSize;
pBmpInfoHeader^.biXPelsPerMeter := 0;
pBmpInfoHeader^.biYPelsPerMeter := 0; pBmpInfoHeader^.biClrUsed := 256;
pBmpInfoHeader^.biClrImportant := $21b0b;
end;
我有一个VC++写的虹膜应用事例,目前急需用在DELPHI中,谢谢你的关注!