我用vc08,mfc框架的程序vcMFC图片插入

解决方案 »

  1.   

    CImage::Load/Draw()加载显示PNG图片
      

  2.   

    bool CEditListBox::LoadImageFromResource(IN CImage* pImage,IN UINT nResID,IN LPCWSTR lpTyp)
    {
        if ( pImage == NULL) return false;
        pImage->Destroy();
        
        if(lpTyp == RT_BITMAP)
        {
            pImage->LoadFromResource(AfxGetResourceHandle(),MAKEINTRESOURCE(nResID));
        }
        else  // PNG
        {
            HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
            if (hRsrc == NULL) return false;        HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
            if (hImgData == NULL)
            {
                ::FreeResource(hImgData);
                return false;
            }        LPVOID lpVoid = ::LockResource(hImgData);
            LPSTREAM pStream = NULL;
            DWORD dwSize = ::SizeofResource(AfxGetResourceHandle(), hRsrc);
            HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize);
            LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew);
            ::memcpy(lpByte, lpVoid, dwSize);        ::GlobalUnlock(hNew);        HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);
            if ( ht != S_OK )
            {
                GlobalFree(hNew);
            }
            else
            {
                pImage->Load(pStream);
                GlobalFree(hNew);
            }
            ::FreeResource(hImgData);
        }    return true;
    }void CEditListBox::HandleAlpha( CImage *img )
    {
        if (img->GetBPP() == 32)
        {
            int i;
            int j;
            for (i = 0; i < img->GetWidth(); i++)
            {
                for (j = 0; j < img->GetHeight(); j++)
                {
                    byte *pByte = (byte *)img->GetPixelAddress(i, j);
                    pByte[0] = pByte[0] * pByte[3] / 255;
                    pByte[1] = pByte[1] * pByte[3] / 255;
                    pByte[2] = pByte[2] * pByte[3] / 255;
                }
            }
        }
    }使用方法:
    CImage img;
     LoadImageFromResource(&img,id,_T("PNG")); // id为资源ID
    HandleAlpha(&img);然后就可以用img.Draw(........)了
      

  3.   

    开源图像库,OpenCV、CxImage都很方便