我可以在哪里存储图像进行自定义控制?

时间:2014-03-31 13:01:34

标签: c# .net winforms custom-controls resx

现在,我开发了一个winfroms应用程序。我需要创建一个自定义控件。我的自定义控件使用图片。我不想将这些图片存储在项目资源文件中。

global::Wrigley_Data_Mart_Manager_2.Properties.Resources.previous_16x16;

我想将图片存储在自定义控件的资源文件中。但它非常不舒服。 (设计师总是从那里删除图片)。我可以在哪里存储自定义控件的图像?我想我的自定义控件是自给自足的,并且可以在其他项目中使用。

2 个答案:

答案 0 :(得分:2)

如果您不想使用资源(resx),那么您始终可以将图像文件作为嵌入资源包含在项目中。

您可以创建一个文件夹来保存图像,并调用&#34;添加现有&#34;,添加您想要嵌入到项目中的图像。然后在每个文件的“属性”窗口中,对于&#34;构建操作&#34; 选项,突出显示&#34;嵌入式资源&#34; 选项。< / p>

要访问该文件,您可以使用项目的完整命名空间+项目中的文件夹路径调用Assembly.GetManifestResourceStream(string)

例如,使用项目名称:&#34; MyCompany.MyTestProject&#34; ,然后将图像存储在&#34; Images&#34; 文件夹为&#34; Images / image1.gif&#34;

然后命名空间为:

Assembly.GetManifestResourceStream("MyCompany.MyTestProject.Images.image1.gif")

答案 1 :(得分:1)

另一种方法是将它们转换为字节数组并将它们作为BLOB存储在数据库中。

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
     MemoryStream ms = new MemoryStream();
     imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
     return  ms.ToArray();
}

然后将它们转换回来:

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}