• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

HICON图标保存失真

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

if(HICON != NULL)
{

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

}

哪位可以给我说一个思路或方法的,先谢过了
...全文
97 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
有什么导出的不失真的方法吗?
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2009-07-02 11:00
社区公告

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