整理了一下关于向visual studio里嵌入图片资源的方案,做下记录.
1.图片添加的方式
如果图片经常用(比如标题栏图标之类),那么最好程序运行时直接从内存中加载,这时需要把图片编译进dll或exe中.
如果不常用的图片,或者出于发布dll/exe大小的考虑,那么一般采取外挂的方式
2.将图片编译进exe/dll
前提:向vs项目中添加图片,有时删来删区发现vs不显示你添加的文件夹,此时在solution explorer中勾选显示全部file,然后找到你要的file右键包含进项目中
添加完图片后,右键属性,build action: 默认是content
wpf 选择resource
注意在<image>属性对话框里用vs智能提示添加图片,手写urn比较麻烦
winform 选择embedded resource
对于一般项目,有两种方式.
其一,选择embedded resource,然后核心方法Assembly.GetManifestResourceStream(string name)将图片转为Stream,然后用BitmapSource的一个子类BitmapFrame.Create(Stream s)来创建BitmapSource
name这样写:
假如图片1.icon放在Resources文件夹下,命名空间为Test,则
Test.Resources.1.icon
其二,其实是第一种方法的升级版,一般推荐使用,就是右键项目添加Resource.resx文件,然后双击它看着添加就可以了
比如添加了1.icon,命名为test(默认名为文件名1),这样调用Resource.test 注意其System.Drawing下,是一个MarshalByRefObject
是一个非托管资源,调用System.Windows.Interop.Imaging的三个方法将其转换为BitmapSource
3.外部图片
只要注意相对路径是相对于dll/exe的即可