[转]使用Bitmap.FromStream(GetType().Assembly.GetManifestResourceStream())出现System.ArgumentException的解决办法
http://blog.csdn.net/blue_sky_blue_heart/archive/2005/12/17/555139.aspx
今天碰到了一个非常“妖”的问题,就是在自己的数据挖掘开发包中需要动态加载一张图片,以在数据挖掘结果图表Chart中显示,程序如下:
Image image = Bitmap.FromStream(
GetType().Assembly.GetManifestResourceStream( NameSpace+"." + mapname) );
但是调试时总会抛出异常“未处理的“System.ArgumentException”类型的异常出现在 system.drawing.dll 中。其他信息: “null”不是“stream”的有效值。”,显然GetTyp().Assembly.GetManifestResourceStream()方法并没有找到需要加载的图片。难道是命名空间的问题,我就采用
Assembly asm = Assembly.GetExecutingAssembly();
Image image = new Bitmap(asm.GetManifestResourceStream(asm.GetName().Name
+ "." +mapname));
和
string localNameSpace = this.GetType().Namespace;
Image image = Bitmap.FromStream(
GetType().Assembly.GetManifestResourceStream(localNameSpace + "." + mapname) );
这两种方式分别进行尝试,跟踪进去发现命名空间都是一样且正确的,结果仍返回同样的异常。
可是其他代码都没有问题啊,实在让人不得其解。
查了一下资料,发现有人提到Build Action" property should be set to " Embedded Resourse",我突然想到Assembly.GetManifestResourceStream 是从当前程序集加载指定的清单资源,呵呵,我要加载的图片仅仅
是放在项目文件夹中并包含在项目中,这个不能算是程序集中的资源阿。赶紧从项目文件列表中找到相应图片,果然发现图片的属性-〉生成操作类型是“编译”,将其改成“嵌入的资源”,重新编译,RUN。哈哈,一切都OK了。
------------------------
C#写WinForm的时候,常常用到里面的资料文件.就比如加入一个窗体的背景图片.如果不加入资源文件的时候,只能把图片放入Bin目录下,然用Application.StartupPath+文件名从而加入图片.这一种法有一个不好的地方就是如果图片被用户删了什么办呢?所以我个人认为,最好用的就是导入资料文件.
导入资料文件很简单,这里就不用说啦.下面谈一谈引用资源文件的几个方法.有谁需要用到这一点知识的可以参考一下:
一,用反射的方法.
Assembly assem = this.GetType().Assembly;
Stream stream = assem.GetManifestResourceStream("Draw.Resources.xunmeng.jpg");
this.BackgroundImage = new Bitmap(stream);
二,常用的方法.
//这里用的引用的是字符串
ResourceManager resource = new ResourceManager(typeof(About));
this.label1.Text = (string)resource.GetObject("MyName");
三,资源文件读取类.
using (ResXResourceReader reader = new ResXResourceReader(@"About.resx"))
{
foreach (DictionaryEntry entry in reader)
{
if (entry.Key.ToString() == "MyName")
{
this.label2.Text = (string)entry.Value;
}
}
}
我个人比较喜欢用第二种方法.第一种方法也是比较好的,但第三种的话可能要出问题.具体的自己试一试好啦.
文章出处:http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008822/137028.html
------------------------
分享到:
相关推荐
这个档案是 C# WinForm 读取内嵌资源范例
c# winform 加载文件显示缩略图 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的
语言: C# winform 数据库:MySQL 8.0.0.19 环境版本:Framework4.0 IDE:Visual Studio 2010 首先在自己电脑的MySQL上导入SQL文件:csharp_hrms.sql(触发器也在里面) 提示:MySQL高版本向低版本导入SQL文件时...
本系统采用winform实现,实现对资源的管理,包括查看,搜索 ,后退前进,上一层 层简单功能仅用于交流学医,不具备商业代码的条件,采用vs2010 .net framework 4.0
c# winform 多语言切换 本地化
1)窗口分左右结构,包含菜单、工具栏、树形视图和列表;...2)展示用户目录及其下所有文件夹,点击左边树形视图中的文件夹,右侧列表可显示该文件夹中的子文件夹和文件; 3)对于txt文件,可以双击打开。
内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...
这是一个C#winform小程序,主要功能实现与windows资源管理器类似的界面和功能,该程序可供初学者研究学习,其源码可直接拷贝利用。
演示c# 通过设置DLL文件 生成操作 为 嵌入的资源 后,DLL文件嵌入生成的EXE里,然后动态调用DLL,妈妈再也不用担心我找不到DLL文件了
C# 实现Windows文件资源管理器 内含全部源码
C# WinForm动态加载DLL通过配置文件
winform界面实现Windows风格的资源管理器界面,左边树状的文件目录,可以自定义加文件夹图标
现在很多系统程序都通过配置文件来进行一些基本配置,INI就是其中一种,该资源包括INI的创建和读写权限功能,简单易懂没有连接数据库,使用winform
Winform利用资源文件实现多国语言(含源代码) 三层架构的Winform
C# Winform应用 常用窗体图标合集 可以直接下下来用,量大且好看
在Winform中,使用resx文件实现多语言切换(简体中文,繁体中文,英文),可以同时切换所有打开的窗口的语言
C# WInform TreeLiew资源文件Demo 是我最近做T4模板生成器开发的一个子窗体。 其实现了对磁盘文件的递归加载预览,TreeView的右键菜单,包含文件或文件夹的重命名,新增,删除。。等等操作
资源可以在一个winform页面同时加载多个exe到页面,并且可以传参数。
c#winform下载上传文件显示进度条 c#winform下载上传文件显示进度条 c#winform下载上传文件显示进度条 c#winform下载上传文件显示进度条
在好多的C#和 .Net的论坛中都会提到如何使用内嵌资源的话题,对大多一般的数项目来说,这也许更不就不是一个问题.但是,对于一些复杂的项目,这也许就成了问题.本文会把论坛中的内容汇总一下,比起查询论坛来,文章显得更...