如何把一个JPG图片作为资源导入???

解决方案 »

  1.   

    jpg无法作为位图/图标导入,但可以作为二进制资源导入。
      

  2.   

    vc7可以直接将jpg作为资源倒入,vc6不行只能作为二进制倒入,要想在vc6中使用得自己解码。
      

  3.   

    在资源中点击右键,在菜单中选择import
      

  4.   

    自定义一个类型,然后导入
    在程序中用LoadResource和LockResource等函数载入
      

  5.   

    HBITMAP CPicture::LoadImageFromID(UINT nIDRes)
    {
    try
    {
    HMODULE hInst=GetModuleHandle("Test.dll");//your dll name
    LPCTSTR lpRes = MAKEINTRESOURCE(nIDRes);
    HRSRC hRsrc = ::FindResource(hInst, lpRes, "JPG");
    if (NULL == hRsrc)
    return FALSE;

    HGLOBAL hGlobal = LoadResource(hInst, hRsrc);
    if (NULL == hGlobal)
    return FALSE;

    DWORD dwSize = SizeofResource(hInst, hRsrc);
    LPVOID lpData = LockResource(hGlobal);
    if (NULL == lpData)
    return FALSE;

    // alloc memory based on file size
    HGLOBAL hJPG = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
    LPVOID lpJGP = ::GlobalLock(hJPG);
    memcpy(lpJGP, lpData, dwSize);
    ::GlobalUnlock(hJPG);

    //LPVOID pvData = GlobalLock(hGlobal);
    //_ASSERTE(NULL != pvData);

    // read file and store in global memory

    LPSTREAM pstm = NULL;
    // create IStream* from global memory
    HRESULT hr = CreateStreamOnHGlobal(hJPG, TRUE, &pstm);
    _ASSERTE(SUCCEEDED(hr) && pstm);

    // Create IPicture from image file
    LPPICTURE gpPicture;

    hr = ::OleLoadPicture(pstm, dwSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
    _ASSERTE(SUCCEEDED(hr) && gpPicture);
    pstm->Release();

    OLE_HANDLE m_picHandle;

    gpPicture->get_Handle(&m_picHandle);
    return (HBITMAP)m_picHandle;
    }
    catch (...)
    { }
    return NULL;
    }
      

  6.   

    奇怪了,我导入的时候报错说不是有效的JPEG文件???????????????