保存为 bmp 也行,但我保存为bmp的时候,背景总是黑色的,vckbase上徐景周的一个程序也是,保存为bmp图片后,北京也是黑色的。我要的是,颜色一点都不变。

解决方案 »

  1.   

    最好能存为icon.下面的代码我可以很容易动态的的显示一个ico文件
    HICON m_hIcon = (HICON)LoadImage( NULL, "c:\\11.ico", 
    IMAGE_ICON, 0, 0, LR_LOADFROMFILE ); HDC hdc = ::GetDC(m_hWnd);
    ::DrawIconEx(hdc, 50, 50, m_hIcon, 16, 16, 
    0, 0, DI_NORMAL );
    ::ReleaseDC(m_hWnd, hdc);
      

  2.   

    哎,没有人会吗,我上codeguru上也去了,也是找不到答案
      

  3.   

      CSDN上好像有ICO文件格式说明吧,自己取图像数据以后按格式保存试试.
      

  4.   

    用IPicture.Save
    下面是保存bmp,同样的方法可以保存icon
    void savebmp(CBitmap& bmp)
    {
    CPictureHolder picture;
    picture.CreateFromBitmap((HBITMAP)bmp, NULL, TRUE);
    LPPICTUREDISP pPictureDisp=picture.GetPictureDispatch();
    pPictureDisp->Release(); // must be released
    IStorage* pStg = 0;        hr = ::StgCreateDocfile(L"c:\\picttest",
                  STGM_SHARE_EXCLUSIVE |
                  STGM_CREATE |
                  STGM_READWRITE,
                  0, &pStg);
            if(SUCCEEDED(hr))
            {
                IStream* pStream = 0;            hr = pStg->CreateStream(L"PICTURE",
                      STGM_SHARE_EXCLUSIVE |
                      STGM_CREATE |
                      STGM_READWRITE,
                      0, 0, &pStream);
                if(SUCCEEDED(hr))
                {
                    hr = pPictureDisp->SaveAsFile(pStream,
                          TRUE, // save mem copy
                          NULL);
                    pStream->Release();
                }
                pStg->Release();
            }
            pPictureDisp->Release();
    }
      

  5.   

    void SaveIcon(HICON hIconToSave, LPCTSTR sIconFileName)
    {
    if(hIconToSave==NULL || sIconFileName==NULL)
    return;
    //warning: this code snippet is not bullet proof.
    //do error check by yourself [masterz]
    PICTDESC picdesc;
    picdesc.cbSizeofstruct = sizeof(PICTDESC);
    picdesc.picType = PICTYPE_ICON ;            
    picdesc.icon.hicon = hIconToSave;
    IPicture* pPicture=NULL;
    OleCreatePictureIndirect(&picdesc, IID_IPicture, TRUE,(VOID**)&pPicture);
    LPSTREAM pStream;
    CreateStreamOnHGlobal(NULL,TRUE,&pStream);
    LONG size;
    HRESULT hr=pPicture->SaveAsFile(pStream,TRUE,&size);
    char pathbuf[1024];
    strcpy(pathbuf,sIconFileName);
    CFile iconfile;
    iconfile.Open(pathbuf, CFile::modeCreate|CFile::modeWrite);
    LARGE_INTEGER li;
    li.HighPart =0;
    li.LowPart =0;
    ULARGE_INTEGER ulnewpos;
    pStream->Seek( li,STREAM_SEEK_SET,&ulnewpos);
    ULONG uReadCount = 1;
    while(uReadCount>0)
    { pStream->Read(pathbuf,sizeof(pathbuf),&uReadCount);
    if(uReadCount>0)
    iconfile.Write(pathbuf,uReadCount);
    }
    pStream->Release();
    iconfile.Close();
    }