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;
}

解决方案 »

  1.   

    uses
      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;
      

  2.   

    TO: hongqi162
    我有一个VC++写的虹膜应用事例,目前急需用在DELPHI中,谢谢你的关注!
      

  3.   

    可以考虑封装成dll,在delphi中调用。
      

  4.   

    还是封装dll的好,c++处理这些有一定的优势,代码已经有了做个封装也不是很麻烦,动这么大的规模实在不划算