[WPF] 嵌入资源到DLL,并解决PNG图片问题
2014-01-06 16:46
357 查看
在WPF有很多种资源文件存储的方式,就图片的存储就麻烦到极点。
最近自己弄一个项目就遇到这样那样的问题,现在把自己的使用方法总结出来给大伙借鉴借鉴!
在我的项目中,我并不想把所有的图片都存放在文件夹下,因为这样用户如果图片文件没有拷贝到就悲剧了。
最初我是把图片资源拖到主程序的资源中,这样就能主动嵌入进去,不必生成到文件夹中,但是我又发现这样主程序太大了。
这当然不是我想看到的,所以有了新建一个类库项目,把图片资源都压缩到类库项目中,然后在主程序中引用!
步骤如下:
1.新建类库项目
2.添加图片资源:直接拖动图片到项目中即可,当然你可以有自己的文件夹
3.编写主程序访问类。
4.主程序访问
简单来说就是4步;但是这样你肯定不会,并且在这里也有两种方法:
清单:两个项目,两个图片,一个类!
第一种:
第一个图片属性:
打开类库属性,资源,把第一个图片拖动进去!
编写代码:
第二种:
设置第二个图片属性:嵌入资源
编写代码:
比较:
两种都是各有所长,第一种先设置为内置资源然后引用,第二种,直接读取流使用!
两种的方法都可以,第一种由于要从Bitmap转为BitmapImage所以存在PNG图片透明度丢失问题。
所以如果针对图片,第二种要比较好控制一些!
而假如针对音频等文件,你会发现第一种比较好,因为第一种对音频等文件会默认返回Stream类型,这个可以直接返回给主程序使用!
以上只是个人观点,如有错误,还请指正!
免费奉上源码:
WPF资源文件在DLL中的使用方法
最近自己弄一个项目就遇到这样那样的问题,现在把自己的使用方法总结出来给大伙借鉴借鉴!
在我的项目中,我并不想把所有的图片都存放在文件夹下,因为这样用户如果图片文件没有拷贝到就悲剧了。
最初我是把图片资源拖到主程序的资源中,这样就能主动嵌入进去,不必生成到文件夹中,但是我又发现这样主程序太大了。
这当然不是我想看到的,所以有了新建一个类库项目,把图片资源都压缩到类库项目中,然后在主程序中引用!
步骤如下:
1.新建类库项目
2.添加图片资源:直接拖动图片到项目中即可,当然你可以有自己的文件夹
3.编写主程序访问类。
4.主程序访问
简单来说就是4步;但是这样你肯定不会,并且在这里也有两种方法:
清单:两个项目,两个图片,一个类!
第一种:
第一个图片属性:
打开类库属性,资源,把第一个图片拖动进去!
编写代码:
public static BitmapSource GetBitmapImage_001() { BitmapSource returnSource; try { //直接获取资源 Bitmap bmap = TestResource.Properties.Resources.I_001; //转换格式 returnSource = Imaging.CreateBitmapSourceFromHBitmap(bmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); bmap.Dispose(); } catch { returnSource = null; } return returnSource; }
第二种:
设置第二个图片属性:嵌入资源
编写代码:
public static BitmapSource GetBitmapImage_002() { //获取文件流 Assembly myAssembly = Assembly.GetExecutingAssembly(); //格式为:项目名称-文件夹地址-文件名称 Stream myStream = myAssembly.GetManifestResourceStream("TestResource.Resource.I_002.png"); //图片格式 BitmapImage image = new BitmapImage(); image.BeginInit(); image.StreamSource = myStream; image.EndInit(); myStream.Dispose(); myStream.Close(); return image; }
比较:
两种都是各有所长,第一种先设置为内置资源然后引用,第二种,直接读取流使用!
两种的方法都可以,第一种由于要从Bitmap转为BitmapImage所以存在PNG图片透明度丢失问题。
所以如果针对图片,第二种要比较好控制一些!
而假如针对音频等文件,你会发现第一种比较好,因为第一种对音频等文件会默认返回Stream类型,这个可以直接返回给主程序使用!
以上只是个人观点,如有错误,还请指正!
免费奉上源码:
WPF资源文件在DLL中的使用方法
相关文章推荐
- 解决嵌入WinForm的WPF控件无法显示图片问题
- wpf C# 解决代码 引用 资源 图片 问题
- 详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
- 解决PNG图片在IE6下背景不透明的问题让IE6支持PNG透明背景
- php 多张图片合并解决png黑背景问题
- 彻底解决 PNG图片透明的问题!
- 关于图片资源在android2.1/2.2/2.3下无法显示的问题以及解决方法
- 解决canvas跨域问题(图片,视频资源跨域)
- vue-cli中解决css引用图片打包后找不到文件资源的问题
- 解决IE 7.0不能显示PNG图片的问题
- No mapping found for HTTP request with URI 找不到图片或者其他的静态资源问题解决办法
- 用 VC 纯资源 dll 解决国际化问题
- 解决IE6下PNG透明问题,支持平铺背景图片
- 解决扩展MFC DLL与主程序资源冲突问题
- vue+webpack解决css引用图片打包后找不到资源文件的问题
- DD_belatedPNG.js解决透明PNG图片背景灰色问题
- 解决IE6png背景图片透明的问题
- Android 将Activity殴打jar包 对于由第三方使用 解决XML 图片 文本资源并不难过进入jar包装问题!
- 使用asciiflow绘制文本图形,解决文本文档中无法嵌入图片问题
- PNG图片导致的WPF性能问题