我现在要做的是,A功能把一个图片写入数据库,B功能把数据库中的数据取出,然后显示出这张图片
A功能好显示,B功能。请大牛帮助
问了一个朋友说了一个函数CreateStreamOnHGlobal
但是baidu了下都没有例子之类的,请牛牛们指点

解决方案 »

  1.   

    数据库的blob段,图片按文件流读写不就可以啦,例子网上大把
      

  2.   

    HBITMAP CreateDIBSection(
      __in   HDC hdc,
      __in   const BITMAPINFO *pbmi,//要创建的设备无关位图信息
      __in   UINT iUsage, // DIB_PAL_COLORS或者DIB_RGB_COLORS
      __out  VOID **ppvBits, //指向存储位图数据的内存地址,
      __in   HANDLE hSection,//NULL
      __in   DWORD dwOffset  //0,文件偏移量
    );
    该函数创建一个设备无关位图,第四个参数就是位图的数据流指针。你充数据库里读出位图数据,可以传递给这个参数。第二参数需要初始化。
      

  3.   

    先创建BITMAPINFO ,再通过CreateDIBSection,得到HBITMAP,然后再通过CBitmap的Attach,得到CBitmap。CBitmap* CSsVPageView::GetCBitmapFromBMPInfo(LONG srcWidth,LONG srcHeight,byte *pGradImg)
    {
    void* pBitsDib;
    CBitmap* wrk_nBitmap;
    CGdiObject* wrk_pGdiObject;
    CDC wrk_cdcMem;
    HBITMAP hBitmap;
    HDC hdc; LPBITMAPINFO lpbmi = new   BITMAPINFO; 
    ZeroMemory(lpbmi, sizeof(BITMAPINFO)); 
    lpbmi-> bmiHeader.biSize =   sizeof(BITMAPINFOHEADER); 
    lpbmi-> bmiHeader.biPlanes =   1; 
    lpbmi-> bmiHeader.biCompression =   BI_RGB; 
    lpbmi-> bmiHeader.biClrImportant =   0;   
    lpbmi-> bmiHeader.biSizeImage =   0; 
    lpbmi-> bmiHeader.biClrUsed =   0; 
    lpbmi-> bmiHeader.biBitCount =   24; 
    lpbmi-> bmiHeader.biWidth =   srcWidth; 
    //lpbmi-> bmiHeader.biHeight =   srcHeight; 
    lpbmi-> bmiHeader.biHeight =   srcHeight*(-1); 
    lpbmi-> bmiHeader.biXPelsPerMeter=   0; 
    lpbmi-> bmiHeader.biYPelsPerMeter=   0;  hdc = ::GetDC(NULL);
    wrk_cdcMem.CreateCompatibleDC(NULL);
    hBitmap = ::CreateDIBSection(NULL, lpbmi, DIB_RGB_COLORS, (void**)&pBitsDib, NULL, 0);
    wrk_nBitmap = new CBitmap();
    wrk_nBitmap->Attach(hBitmap);
    wrk_pGdiObject = wrk_cdcMem.SelectObject(wrk_nBitmap); SetDIBits(wrk_cdcMem.GetSafeHdc(),hBitmap,0,srcHeight,pGradImg,lpbmi,DIB_RGB_COLORS); wrk_cdcMem.SelectObject(wrk_pGdiObject);
    delete lpbmi;
    wrk_cdcMem.DeleteDC();
    if(hdc != NULL)
    {
    ::ReleaseDC(NULL,hdc);
    }
    return wrk_nBitmap;
    }
      

  4.   

    有什么函数能把CBitmap 转成流。
      

  5.   


    int GetDIBits

    HDC hdc,
    HBITMAP hbmp,
    UINT uStartScan,
    UINT cScanLines,
    LPVOID lpvBits,
    LPBITMAPINFO lpbi,
    UINT uUsage
    );
    读取hbmp句柄所标识的位图的数据部分,以二进制流存在lpvbits中。这个内存指针要提前分配好。
      

  6.   

    fopen当普通的二进制读不行吗?流用GDI+较简单方便