读书人

大伙儿帮忙看看这个程序为啥把PNG图像

发布时间: 2012-07-25 09:43:05 作者: rapoo

大家帮忙看看这个程序为啥把PNG图像放进内存里再读
这是别人写的:

C/C++ code
    ImageFromIDResource(IDR_PNGNUM,"PNG",m_pImageNum);    ImageFromIDResource(IDR_PNGBAK1,"PNG",m_pImageClock1);    ImageFromIDResource(IDR_PNGBAK,"PNG",m_pImageClock);    ImageFromIDResource(IDR_PNGHOUR,"PNG",m_pImageHHour);    ImageFromIDResource(IDR_PNGMIN,"PNG",m_pImageHMinu);    ImageFromIDResource(IDR_PNGSEC,"PNG",m_pImageHSec);

ImageFromIDResource定义
C/C++ code
BOOL CGDIPClockDlg::ImageFromIDResource(UINT nID, LPCTSTR sTR,Image * &pImg){    HINSTANCE hInst = AfxGetResourceHandle();    HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type    if (!hRsrc)        return FALSE;    // load resource into memory    DWORD len = SizeofResource(hInst, hRsrc);    BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);    if (!lpRsrc)        return FALSE;    // Allocate global memory on which to create stream    HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);    BYTE* pmem = (BYTE*)GlobalLock(m_hMem);    memcpy(pmem,lpRsrc,len);    IStream* pstm;    CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);        // load from stream    pImg=Gdiplus::Image::FromStream(pstm);    // free/release stuff    GlobalUnlock(m_hMem);    pstm->Release();    FreeResource(lpRsrc);}


但是我自己把
C/C++ code
    ImageFromIDResource(IDR_PNGNUM,"PNG",m_pImageNum);    ImageFromIDResource(IDR_PNGBAK1,"PNG",m_pImageClock1);    ImageFromIDResource(IDR_PNGBAK,"PNG",m_pImageClock);    ImageFromIDResource(IDR_PNGHOUR,"PNG",m_pImageHHour);    ImageFromIDResource(IDR_PNGMIN,"PNG",m_pImageHMinu);    ImageFromIDResource(IDR_PNGSEC,"PNG",m_pImageHSec);
全部改成下面这个后,程序运行一切正常,那为啥还要多余写ImageFromIDResource这个定义呢,还要从资源ID里取出来放进内存再读,烦都烦死了, 用原来GDI自带的Image::FromFile不是更好,连写都不用写了,求解释~
C/C++ code
    m_pImageNum=Image::FromFile(L"DigitNUM.png",0);    m_pImageClock1=Image::FromFile(L"ClockBackchain1.png",0);    m_pImageClock=Image::FromFile(L"ClockBackchain.png",0);    m_pImageHHour=Image::FromFile(L"Clockhour.png",0);    m_pImageHMinu=Image::FromFile(L"Clockmin.png",0);    m_pImageHSec=Image::FromFile(L"Clocksec.png",0);



[解决办法]
探讨

引用:

人家那代码是读资源里面的 PNG, 你这是读文件的。他发布的时候不要png文件,你的要带png文件。


真的是这样的吗?

读书人网 >VC/MFC

热点推荐