完整的bmp和光标文件已经存贮在内存中, 请教一下如何从内存中载入BMP图像和光标?

解决方案 »

  1.   

    使用 DIB 相关API 加载BMP
    过程比较繁锁
      

  2.   

    内存中载入BMP图像
    http://shukaiyang.myweb.hinet.net/dibtips/index.html
    从内存中载入光标
    http://www.codeproject.com/bitmap/ColorCursorFromBmp.asp光标的格式可能要再分析一下,或者直接用位图
      

  3.   

    谢谢goodboyws的支持,http://shukaiyang.myweb.hinet.net/dibtips/index.html,这个页面我打不开:(
      

  4.   

    呵呵,http://shukaiyang.myweb.hinet.net/dibtips/index.html好像不对
    这里有个函数,你改一下就可以,看ReadFile之后的部分
    HBITMAP CreateBitmapObjectFromDibFile (HDC hdc, PTSTR szFileName)
        
    {
        
          BITMAPFILEHEADER *  pbmfh ;
        
          BOOL        bSuccess ;
        
          DWORD       dwFileSize, dwHighSize, dwBytesRead ;
        
          HANDLE       hFile ;
        
          HBITMAP      hBitmap ;
                     // Open the file: read access, prohibit write access
              hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
        
        OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL) ;
        
          if   (hFile == INVALID_HANDLE_VALUE)
        
                     return NULL ;
                     // Read in the whole file
              dwFileSize = GetFileSize (hFile, &dwHighSize) ;
              if (dwHighSize)
        
          {
        
                 CloseHandle (hFile) ;
        
                 return NULL ;
        
          }
              pbmfh = malloc (dwFileSize) ;
          if (!pbmfh)
        
          {
        
                 CloseHandle (hFile) ;
        
                 return NULL ;
        
      }
              bSuccess = ReadFile (hFile, pbmfh, dwFileSize, &dwBytesRead, NULL) ;
        
          CloseHandle (hFile) ;
                     // Verify the file
        
          if (!bSuccess     || (dwBytesRead != dwFileSize)    
        
                     || (pbmfh->bfType != * (WORD *) "BM")
        
                     || (pbmfh->bfSize != dwFileSize))
        
      {
        
                 free (pbmfh) ;
        
                 return NULL ;
        
      }
        
                 // Create the DDB
        
          hBitmap = CreateDIBitmap   (hdc,      
        
                             (BITMAPINFOHEADER *) (pbmfh + 1),
        
                          CBM_INIT,
        
                            (BYTE *) pbmfh + pbmfh->bfOffBits,
        
                             (BITMAPINFO *) (pbmfh + 1),
        
                            DIB_RGB_COLORS) ;
        
          free (pbmfh) ;
        
          return hBitmap ;
        
    }