如果用intptr,那我怎么得到bitmap的 PBitmapinfo信息呢?因为是要作为参数进行传递

解决方案 »

  1.   

    本帖最后由 bdmh 于 2011-07-15 13:12:35 编辑
      

  2.   


    我已经不用delphi很多年找不到了
    var 
        BFH:   BITMAPFILEHEADER; 
        pBitmapInfo:   BITMAPINFO; 
        ToFile:   TFileStream; 
        ucGrey:   BYTE; 
        i,   J:   Integer; 
    begin 
        lpwEncapsulateData   :=   lpwEncapsulateData   +   2; 
        dwEncapsulateDataLen   :=   dwEncapsulateDataLen   -   6;     FillMemory(@BFH,   sizeof(BITMAPFILEHEADER),   0);     if   SaveDialog1.Execute   then 
        begin 
            Cursor   :=   crAppStart; 
            BFH.bfType   :=   $4D42;   //文件头内容 
            BFH.bfSize   :=   $051036; 
            BFH.bfOffBits   :=   $036;         pBitmapInfo.bmiHeader.biSize   :=   $028; 
            pBitmapInfo.bmiHeader.biWidth   :=   $0180; 
            pBitmapInfo.bmiHeader.biHeight   :=   $0120; 
            pBitmapInfo.bmiHeader.biPlanes   :=   $01; 
            pBitmapInfo.bmiHeader.biBitCount   :=   $018; 
            pBitmapInfo.bmiHeader.biCompression   :=   0; 
            pBitmapInfo.bmiHeader.biSizeImage   :=   $051000; 
            pBitmapInfo.bmiHeader.biXPelsPerMeter   :=   $0EC4; 
            pBitmapInfo.bmiHeader.biYPelsPerMeter   :=   $0EC4;   //文件头内容结束         ToFile.Create(SaveDialog1.FileName,   fmCreate); 
            ToFile.Write(BFH,   sizeof(BFH)); 
            if   (pBitmapInfo.bmiHeader.biHeight   >   0)   then 
                pBitmapInfo.bmiHeader.biHeight   :=   0   -   pBitmapInfo.bmiHeader.biHeight; 
    //使图像倒过来 
            ToFile.Write(pBitmapInfo.bmiHeader,   sizeof(pBitmapInfo.bmiHeader)); 
            for   i   :=   0   to   floor(dwEncapsulateDataLen   /   2   -   1)   do 
            //对返回的384*288个图像数据灰度进行存储。 
            begin 
                ucGrey   :=   (@(lpwEncapsulateData   +   i)   shr   8); 
                for   j   :=   0   to   2   do 
                    ToFile.Write(ucGrey,   1); 
                ucGrey   :=   LOBYTE((lpwEncapsulateData   +   i)); 
                for   j   :=   0   to   2   do 
                    ToFile.Write(ucGrey,   1); 
            end; 
            ToFile.Destroy; 
        end; 
        Cursor   :=   crDefault;