如果我要载入的资源不是从文件中的也不是资源文件,而是在内存缓冲区的信息,如何使用LoadImage载入.注要求使用LoadImage不使用第三方程序
问题变为
1.有没有办法产生内存文件,直接通过文件名访问那种,并写内存信息到文件中.(不要产生暂时文件)
2.有没有办法动态产生资源文件,并把内存中的信息写入资源文件中

解决方案 »

  1.   

    CreateBitmapIndirect功能的参数是BITMAP ,我要解析BMP文件才能获取这些信息.这个API不好使用
    我的目标就是,比入从网上传过一个bmp文件,我要直接转换为HBITMAP文件.我不想去解析BMP文件,想
    知道是否相关的API函数
      

  2.   

    这是我用的一个函数。缓冲区是完整的文件信息,包含文件头。//从缓冲区中创建一个位图句柄
    HBITMAP Helper_CreateBitmapFromBuffer(LPBYTE pBuffer, DWORD cbSize)
    {
    HBITMAP hBmp=NULL;
    HDC hdc=NULL;
    HPALETTE hPal=NULL,hOldPal=NULL;
    BITMAPFILEHEADER *pbmfHeader=(BITMAPFILEHEADER *)pBuffer;
    DWORD dwOffset=sizeof(BITMAPFILEHEADER);
    // File type should be 'BM' BITMAPINFOHEADER *pbmiHeader = (LPBITMAPINFOHEADER)(pBuffer+dwOffset) ;
    BITMAPINFO * pbmInfo = (LPBITMAPINFO)(pBuffer+dwOffset) ;
    // If bmiHeader.biClrUsed is zero we have to infer the number
    // of colors from the number of bits used to specify it.
    int nColors = pbmiHeader->biClrUsed ? pbmiHeader->biClrUsed : 
    1 << pbmiHeader->biBitCount; LPVOID lpDIBBits;
    if (pbmfHeader->bfType != ((WORD) ('M' << 8) | 'B')) return NULL;
    if( pbmInfo->bmiHeader.biBitCount > 8 )
    lpDIBBits = (LPVOID)((LPDWORD)(pbmInfo->bmiColors + pbmInfo->bmiHeader.biClrUsed) + 
    ((pbmInfo->bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
    else
    lpDIBBits = (LPVOID)(pbmInfo->bmiColors + nColors);

    hdc=GetDC(NULL);
    // Create the palette
    if( nColors <= 256 )
    {
    UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * nColors);
    LOGPALETTE *pLP = (LOGPALETTE *) malloc(nSize);
    int i;
    pLP->palVersion = 0x300;
    pLP->palNumEntries = nColors;

    for( i=0; i < nColors; i++)
    {
    pLP->palPalEntry[i].peRed = pbmInfo->bmiColors[i].rgbRed;
    pLP->palPalEntry[i].peGreen = pbmInfo->bmiColors[i].rgbGreen;
    pLP->palPalEntry[i].peBlue = pbmInfo->bmiColors[i].rgbBlue;
    pLP->palPalEntry[i].peFlags = 0;
    }
    hPal=CreatePalette(pLP);
    free(pLP);
    hOldPal=(HPALETTE)SelectObject(hdc,hPal);
    RealizePalette(hdc);
    }
    hBmp = CreateDIBitmap( hdc, // handle to device context 
    pbmiHeader, // pointer to bitmap size and format data 
    CBM_INIT, // initialization flag 
    lpDIBBits, // pointer to initialization data 
    pbmInfo, // pointer to bitmap color-format data 
    DIB_RGB_COLORS); // color-data usage 
    if( hPal )
    {
    SelectObject(hdc,hOldPal);
    DeleteObject(hPal);
    }
    ReleaseDC(NULL,hdc);
    return hBmp;
    }
      

  3.   

    flyhigh,十分感谢您.请问一下没有对图标和光标的处理代码
    HICON Helper_CreateIconFromBuffer