HICON图标保存失真

coffee_machine 2009-07-02 11:00:16
我从任意格式的文件中,获取这个文件的图标的HICON,

if(HICON != NULL)
{

//利用HICON句柄导出.ico文件进行保存
//但每次保存的.ico文件,严重失真

}

哪位可以给我说一个思路或方法的,先谢过了
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
coffee_machine 2009-07-07
  • 打赏
  • 举报
回复
经过研究,把数据提出来,自己写//位图信息+调色板+彩色位图位值+掩码位图位值 构成*.ico文件,就不会失真
flyskytoday 2009-07-02
  • 打赏
  • 举报
回复
图标的颜色只支持256色吧
coffee_machine 2009-07-02
  • 打赏
  • 举报
回复
void CmenuDlg::SaveIcoToFile(HICON hIconToSave, LPCTSTR sIconFileName)
{
if(hIconToSave==NULL || sIconFileName==NULL)
return;
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();

}
//这个是用HICO保存为ICO文件的代码
//以上是引用他人的代码
coffee_machine 2009-07-02
  • 打赏
  • 举报
回复
CString szFileName = "D:\\Word.exe";
SHFILEINFO shfi;
memset (&shfi, 0, sizeof(shfi));
SHGetFileInfo (szFileName, //文件名
FILE_ATTRIBUTE_NORMAL,
&shfi,
sizeof (shfi),
SHGFI_ICON | SHGFI_USEFILEATTRIBUTES |SHGFI_LARGEICON);

HICON hIcon = CopyIcon(shfi.hIcon);

再用hIcon导出*.ico文件
Conry 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 flyskytoday 的回复:]
图标的颜色只支持256色吧
[/Quote]
xp下32位带alpha通道的都支持
Conry 2009-07-02
  • 打赏
  • 举报
回复
你是怎么保存的,把你保存的代码贴上来
coffee_machine 2009-07-02
  • 打赏
  • 举报
回复
有什么导出的不失真的方法吗?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧