int WINAPI GetDIBits (
               hdc,        // device context handle
               hBitmap,    // bitmap handle
               yScan,      // first scan line to convert
               cyScans,    // number of scan lines to convert
               pBits,      // pointer to pixel bits (out)
               pInfo,      // pointer to DIB information (out)
               fClrUse) ;  // color use flag

解决方案 »

  1.   

    我已经试过了,我的函数是用dll导出的,
    实际情况:Delphi为主程序,本函数负责接收句柄,处理图象,返回结果,现在发现传入的HBITMAP句柄通过函数返回后与传入的句柄不一致,不知原因何在?(Delphi传入的HBITMAP应该没问题)
    部分代码:
    HBITMAP IMAGEDEALING(HBITMAP bmp)
    {
       if bmp return bmp;
       return NULL;
    }
      

  2.   

    不好意思,详细的说
    主程序(Delphi)部分代码
    //导出的函数格式,不多写了
    Function imagedealing(pBmp: hBitmap): smallint;
    //
    Procedure TForm1.Button1Click(Sender: TObject);
    var
     H1:HBITMAP;
     PC:PCHAR;
     STR:STRING;
     i:Smallint;
    begin
    If opendialog1.Execute Then
      Begin
        STR:=opendialog1.FileName;
        PC:=PCHAR(STR);
        H1 := LOADIMAGE(APPLICATION.Handle,PC,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
       i:=IMAGEDEALING(h3,len);  
      END;
    END; 动态连接库
    int ImageDealing(HBITMAP &hdib)
    {
    BITMAPFILEHEADER hdr;
    LPBITMAPINFOHEADER  lpbi;
    LPCTSTR szfile;
    szfile="D:\\asdfg.bmp"; //我随便写的
    if (!hdib)
    return -1;
    CFile file;
    if( !file.Open( szfile, CFile::modeWrite|CFile::modeCreate) )
    return -2;
    lpbi = (LPBITMAPINFOHEADER)hdib;
    int ncolors = 1 << lpbi->biBitCount;
    hdr.bfType = ((WORD)('M'<<8)|'B');
    hdr.bfSize =GlobalSize(hdib) + sizeof(hdr); 
    hdr.bfReserved1 =0;
    hdr.bfReserved2=0;
    hdr.bfOffBits=(DWORD)(sizeof(hdr) + lpbi->biSize +ncolors * sizeof(RGBQUAD));
    //return GlobalSize(hdib);如果此时返回则总是0
    file.Write(&hdr, sizeof(hdr));
    file.Write(lpbi,GlobalSize(hdib));
    file.Close;
    return 100;
    }不知为什么每次只能得到14字节的文件,位图的数据是中写不进去,我认为是HBITMAP作为参数传递发生了错误,但现在不知该如何做才能实现?
    做此动态库的目的在于通过HBITMAP读取位图数据,进一步实现其他的处理。请各位高手指教!