C#中的图标让我好无语!!!!!

sunbinjin 2014-11-15 07:55:15
我自己写个桌面上的app玩,搞了个图标,ico文件,里面有32,64,96,128,256等分辨率,约500KB

程序在没图标的情况下,约200KB
1.我先把程序图标设置下,去工程->属性->应用程序->图标上选择文件 程序增加500K,到了700K!
2.我把窗口的图标设置下,去窗口属性的Icon上选择文件 程序又增加500K,到了1.2MB!
3.我想是不是去资源那设置下,让他们共用就好了?又去工程->属性->资源->图标里添加现在文件,程序又增加了500K!,到了1.5MB!!!


这微软的程序员写的东西,也有放水的时候啊,多个地方引用同一个图标,竟然不会管理?

请位大神,我应该怎么设置,才让它只增加一个图标体积?
另外,我的图标里是有高分辨率的,为啥exe在资源管理器中大图标模式下还是显示小图标,而且有很明显的锯齿现象?


我一直是在win32的vc下开发的,c#没接触过多久,可视我的是好,但问题也多.......
...全文
889 39 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
扯淡砖家 2014-11-26
  • 打赏
  • 举报
回复
还有如果你在一个界面上要弄100个不同的Button难道也手动放过去?我不相信会有人傻傻的把100个窗口的属性一个个配置过去
扯淡砖家 2014-11-26
  • 打赏
  • 举报
回复
所谓的资源都是编译成exe时生成的数据,我疑问的是为啥不对多处引用的资源进行合并? 我这100个窗口设置的图标,给我存100份500K的图标,是人都受不了啊[/quote] 那你100个窗口图标都手动设置过去?编译器优化代码,还有帮你优化引用的资源?如果你引用的资源太大,要不要帮你压缩一下?
sunbinjin 2014-11-26
  • 打赏
  • 举报
回复
引用 38 楼 diaodiaop 的回复:

 notifyIcon1.Icon = System.Drawing.Icon.ExtractAssociatedIcon(Application.StartupPath + "\\Resource\\Images\\favicon.ico");
LZ的问题我也遇到到了 一个exe本身30K 图标30K 那么 如果把ico扔到notifyIcon1.Icon 居然exe变成了1MB以上. 因为Form1.resx变大了 所以exe也大了... 来回复制粘贴到服务器太忙了..所以 我用了上面的一句话....就好了 把原来的资源文件删了..
终极代码,一句话搞定(11楼的改进版),大家以后都可以这么用:
public Main()
{
    Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
}
by_封爱 版主 2014-11-26
  • 打赏
  • 举报
回复

 notifyIcon1.Icon = System.Drawing.Icon.ExtractAssociatedIcon(Application.StartupPath + "\\Resource\\Images\\favicon.ico");
LZ的问题我也遇到到了 一个exe本身30K 图标30K 那么 如果把ico扔到notifyIcon1.Icon 居然exe变成了1MB以上. 因为Form1.resx变大了 所以exe也大了... 来回复制粘贴到服务器太忙了..所以 我用了上面的一句话....就好了 把原来的资源文件删了..
烈火蜓蜻 2014-11-26
  • 打赏
  • 举报
回复
都用了C#, 还纠结内存,大不大干嘛,那么纠结就C++好了,只要没有泄漏就可以了。
扯淡砖家 2014-11-26
  • 打赏
  • 举报
回复
引用 34 楼 sunbinjin 的回复:
[quote=引用 31 楼 wow818wow 的回复:] 所谓的资源都是编译成exe时生成的数据,我疑问的是为啥不对多处引用的资源进行合并? 我这100个窗口设置的图标,给我存100份500K的图标,是人都受不了啊
那你100个窗口图标都手动设置过去?编译器优化代码,还有帮你优化引用的资源?如果你引用的资源太大,要不要帮你压缩一下?[/quote] 为什么不能优化引用资源?只是因为现在没做,你才这样说,做了不是更合理吗? 按你这么说,为啥http传输要压缩?按你的都别做了,全给开发者自己来做好了[/quote] 哥们,优化不是没有代价的,要想编译器帮你优化,那你在调试的时候就要等它完成这个工作。时间这么宝贵,也许一两个资源优化很快,但是数量大了之后能?我没有说编译器不能做这些,但是现在这个技术条件下,将这个事情交给编程人员自己决定更好。你要想实现你的优化,其实你可以去派生窗口,然后自己添加这部分逻辑。甚至像我说的压缩和解压资源都可以实现。 也许在将来,编译器真能像你说的那样完成,但是至少现在不现实。
sunbinjin 2014-11-26
  • 打赏
  • 举报
回复
引用 30 楼 sxl514286339 的回复:
估计 一张图标 分别进入了: Resources —— 资源文件; Form.Desinger.resx —— 窗体资源文件; 还有一个 不知道。 ———————————————————— 删除 Form.Desinger.resx 中的 一串 乱码,在 Load 中,手动指定 Icon= Resources.MyIcon;
求这句话怎么写? this.Icon = xxxx这个不会写, 我来说下,其实3个重复的图标是存在这样的: 1.exe的图标,不知道是放哪,理论上放资源更合理,但我不确定 2.资源里放了一个,这个好理解 3.窗口资源里还有一个 所以,你这个是解决I窗口图标指向资源图标,但程序图标貌似还是会多一份?
sunbinjin 2014-11-26
  • 打赏
  • 举报
回复
引用 31 楼 wow818wow 的回复:
所谓的资源都是编译成exe时生成的数据,我疑问的是为啥不对多处引用的资源进行合并? 我这100个窗口设置的图标,给我存100份500K的图标,是人都受不了啊
那你100个窗口图标都手动设置过去?编译器优化代码,还有帮你优化引用的资源?如果你引用的资源太大,要不要帮你压缩一下?[/quote] 为什么不能优化引用资源?只是因为现在没做,你才这样说,做了不是更合理吗? 按你这么说,为啥http传输要压缩?按你的都别做了,全给开发者自己来做好了
sunbinjin 2014-11-26
  • 打赏
  • 举报
回复
引用 32 楼 wow818wow 的回复:
还有如果你在一个界面上要弄100个不同的Button难道也手动放过去?我不相信会有人傻傻的把100个窗口的属性一个个配置过去
我界面上有约50多个button,上面的文字就是一个个手敲的 100个窗口的大型软件应该也有吧,对于图标,就应该用引用资源更好
扯淡砖家 2014-11-25
  • 打赏
  • 举报
回复
引用 23 楼 sunbinjin 的回复:
[quote=引用 22 楼 wow818wow 的回复:] 本来就可以用资源啊,是你自己没配置好罢了。导入图标时你没看到么?
那请回答我一楼的问题,无图标exe200k,1份图标500K,程序图标+窗口图标,如何配置,让程序只有700K? 以你说的所谓的配置这种操作,而不是楼上的用ExtracIcon [/quote] 难道配置就只能是界面操作的方式,写config文件就不算配置?那你有没有想过为什么你编译完之后,删掉图标还是一样可以看到图标是为什么?或者说你为什么不把图标当成一个控件来理解?
sunbinjin 2014-11-25
  • 打赏
  • 举报
回复
引用 22 楼 wow818wow 的回复:
本来就可以用资源啊,是你自己没配置好罢了。导入图标时你没看到么?
那请回答我一楼的问题,无图标exe200k,1份图标500K,程序图标+窗口图标,如何配置,让程序只有700K? 以你说的所谓的配置这种操作,而不是楼上的用ExtracIcon
吹风的兔子 2014-11-25
  • 打赏
  • 举报
回复
估计 一张图标 分别进入了: Resources —— 资源文件; Form.Desinger.resx —— 窗体资源文件; 还有一个 不知道。 ———————————————————— 删除 Form.Desinger.resx 中的 一串 乱码,在 Load 中,手动指定 Icon= Resources.MyIcon;
sunbinjin 2014-11-25
  • 打赏
  • 举报
回复
引用 28 楼 wow818wow 的回复:
正确,就是因为可视化,所以图片在你引用到窗口图标时,已经拷贝进去了,所以其实图片已经在代码里,就好像你放个控件上去,这个控件也会影响这个exe的大小
所谓的资源都是编译成exe时生成的数据,我疑问的是为啥不对多处引用的资源进行合并? 我这100个窗口设置的图标,给我存100份500K的图标,是人都受不了啊
扯淡砖家 2014-11-25
  • 打赏
  • 举报
回复
引用 27 楼 sunbinjin 的回复:
[quote=引用 24 楼 wow818wow 的回复:] 难道配置就只能是界面操作的方式,写config文件就不算配置?那你有没有想过为什么你编译完之后,删掉图标还是一样可以看到图标是为什么?或者说你为什么不把图标当成一个控件来理解?
我们讨论的配置当然是指vs中的可视化开发,你如果有办法解决楼上的问题也算行啊 别写代码再去load就行,那不是可视化的本意 [/quote] 正确,就是因为可视化,所以图片在你引用到窗口图标时,已经拷贝进去了,所以其实图片已经在代码里,就好像你放个控件上去,这个控件也会影响这个exe的大小
sunbinjin 2014-11-25
  • 打赏
  • 举报
回复
引用 24 楼 wow818wow 的回复:
难道配置就只能是界面操作的方式,写config文件就不算配置?那你有没有想过为什么你编译完之后,删掉图标还是一样可以看到图标是为什么?或者说你为什么不把图标当成一个控件来理解?
我们讨论的配置当然是指vs中的可视化开发,你如果有办法解决楼上的问题也算行啊 别写代码再去load就行,那不是可视化的本意
sunbinjin 2014-11-25
  • 打赏
  • 举报
回复
引用 25 楼 assky124 的回复:
图标只能选文件,估计是微软偷懒。 VS可以自定义设计器,觉得不爽,可以自己写一个啊
这明显是不可能的,ide做出来,就是方便人的,这种明显的缺陷,应该修改掉就好了 问题是.net出来10多年了,这种设计上的问题都还有,就不解了
assky124 2014-11-25
  • 打赏
  • 举报
回复
图标只能选文件,估计是微软偷懒。 VS可以自定义设计器,觉得不爽,可以自己写一个啊
扯淡砖家 2014-11-20
  • 打赏
  • 举报
回复
引用 21 楼 sunbinjin 的回复:
[quote=引用 20 楼 wow818wow 的回复:] 简单的项目你当然看不出来了,但是当数量大了之后呢,因为图标不是一两的啊。而且如果都是代码写。那窗体的设计器有什么用?不就是想让你看到效果么?难道为了省空间,每次开设计器都去加载?还有关键不是安全判断,而是文件不见了接下来怎么处理。如果你写了一个软件,忘记发布图标,结果界面丑死。你会不会骂微软?
你就没明白我的意思,我说的资源感觉我都没理解…… 我是说ms可以设计为form设计器里选图标时,是从资源里选,而不是去指定新文件,这样,资源文件即可用于文件图标,又可以用于所有窗口图标,明白了不?现在ms的结果是,exe图标一份,100个form要100份! 你理解资源后,你后面说的,文件不存在、忘记发布图标根本都不存在[/quote] 本来就可以用资源啊,是你自己没配置好罢了。导入图标时你没看到么?
sunbinjin 2014-11-20
  • 打赏
  • 举报
回复
引用 20 楼 wow818wow 的回复:
简单的项目你当然看不出来了,但是当数量大了之后呢,因为图标不是一两的啊。而且如果都是代码写。那窗体的设计器有什么用?不就是想让你看到效果么?难道为了省空间,每次开设计器都去加载?还有关键不是安全判断,而是文件不见了接下来怎么处理。如果你写了一个软件,忘记发布图标,结果界面丑死。你会不会骂微软?
你就没明白我的意思,我说的资源感觉我都没理解…… 我是说ms可以设计为form设计器里选图标时,是从资源里选,而不是去指定新文件,这样,资源文件即可用于文件图标,又可以用于所有窗口图标,明白了不?现在ms的结果是,exe图标一份,100个form要100份! 你理解资源后,你后面说的,文件不存在、忘记发布图标根本都不存在
扯淡砖家 2014-11-20
  • 打赏
  • 举报
回复
引用 18 楼 sunbinjin 的回复:
[quote=引用 15 楼 wow818wow 的回复:] 在我看来这不是设计缺陷。而是出于效率的考虑。要是按照你说的办法,那就意味着每次运行时,程序都要去你指定的图标位置拷贝图标放入窗体。同时编译器需要保存你的路径,再加上要做文件是否存在判断,已经编译时预览加载的问题。与其这样不如浪费一些存储空间,直接将图片加载到窗体中,既保证安全,又能提高效率
图标在form里或在资源里,我感觉 加载速度不会有区别啊,资源安全性判断带来的成本你不可能感觉得到嘛 [/quote] 简单的项目你当然看不出来了,但是当数量大了之后呢,因为图标不是一两的啊。而且如果都是代码写。那窗体的设计器有什么用?不就是想让你看到效果么?难道为了省空间,每次开设计器都去加载?还有关键不是安全判断,而是文件不见了接下来怎么处理。如果你写了一个软件,忘记发布图标,结果界面丑死。你会不会骂微软?
加载更多回复(19)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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