ResourceWriter rw = new ResourceWriter("My.resources");//资源文件名称Image img1 = Image.FromFile("Photo1.jpg");
Image img2 = Image.FromFile("Photo2.jpg");//以下是在资源文件中加入图象
rw.AddResource("Photo1", img1);
rw.AddResource("Photo2", img2);rw.Generate(); //产生一个资源文件
rw.Close();
我用这些代码生成了一个名叫My.resources的资源文件
请问怎么读取里面的图片呀??
我只需要一点击Button1,然后在PictureBox1里显示那张图片出来就行了代码应该怎么写??ResourceManager rm = new ResourceManager("My.resources", Assembly.GetExecutingAssembly());
PictureBox1.Image = (Image)rm.GetObject("Photo1");我直接在Button1的事件中写这些代码的话,会出错,显示如下:
未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“My.resources.resources”正确嵌入或链接到程序集“TestForm”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。应该怎么写?
ResourceReader,具体的代码如下: string f = Application.ExecutablePath;
f = f.Substring(0, f.LastIndexOf('\\') + 1);
ResourceReader rr = new ResourceReader("My.resources");
var ide = rr.GetEnumerator();
while (ide.MoveNext())
{
if (ide.Key.ToString() == "P1")
pictureBox1.Image = (Image)ide.Value;
} 我只写了P1的。
ResourceReader必须取得这个Enumerator进行逐个枚举,没办法直接通过KEY访问。
public static System.Drawing.Image LoadCurrentModuleResourceImage(string resName)
{
StackTrace trace = new StackTrace();
StackFrame parentFrame = trace.GetFrame(1);
MethodBase parentMethod = parentFrame.GetMethod();
Type parentType = parentMethod.DeclaringType;
Assembly parentAssembly = parentType.Assembly;
int idx = parentAssembly.FullName.IndexOf(",");
string assemblyName = parentAssembly.FullName.Substring(0, idx);
string resPath = assemblyName + "." + resName;
System.IO.Stream stream = parentAssembly.GetManifestResourceStream(resPath); System.Drawing.Image img = null;
if (stream!=null)
{
img = new System.Drawing.Bitmap(stream);
}
return img;
}
usage:System.Drawing.Image img = Utilities.LoadCurrentModuleResourceImage("Resources.company.gif");
visit:
http://blog.csdn.net/alonesword/
public static Dictionary<string,object> LoadResources(string fileName)
{
ResourceReader rr = new ResourceReaderfile(fileName);
Dictionary<string,object> ret= new Dictionary<string,Object>(); var ide = rr.GetEnumerator();
while (ide.MoveNext())
{
ret.Add(ide.Key,ide.Value);
}
return ret;
}
//取得资源只需要如下:
pictureBox1.Image = (Image)resource["P1"];
具体嵌入的方法是在工程是添加资源文件,然后在VS2005中添加你需要编译进来的图片,命名等。然后就会自动编译进程序集了。
http://hi.baidu.com/sageking2/blog/item/29b863ef30ad29e9cf1b3e78.html
1. 按顺序展开你的工程:TestForm-Properties-Resources.resx
2. 双击Resources.resx,打开资源的编辑界面。然后把你的图片拖到资源编辑器里。修改在资源编辑器中图片的名字,假如我们改为test.
3. 访问图片代码:Image test= Properties.Resources.test;
1.将你bin\Debug目录下生成的My.resources添加到工程。
2.修改:
ResourceManager rm = new ResourceManager("My.resources", Assembly.GetExecutingAssembly());为
ResourceManager rm = new ResourceManager("TestForm.My", Assembly.GetExecutingAssembly());对于2做点说明,为什么是TestForm.My。首先不要.resources是因为ResourceManager会默认加上这个后缀,你写My.resources,其实它读的是
My.resources.resources.其次要加上你生成资源的代码所在命名空间,即你ResourceWriter所在命名空间。参照http://www.codeproject.com/KB/cs/cs-multi-assembly-res.aspx上边的例子会有更深刻体会。