如何在项目中将图像作为资源包含在内?

时间:2016-02-05 22:00:44

标签: c# image-processing png excel-interop

我想在我的项目中添加一个图像作为资源,以便我可以引用它以编程方式插入电子表格中的范围。

我通过右键单击项目并选择添加>来添加图像。现有项目......

我希望使用此代码可以获得图像(.png文件):

myYearQtr = "Select Distinct Date_YYYYQX from [tbl_YYYYQX_LU] where [Date_YYYYQX] = '" & Me.cboYearQtr & "'"

...但是使用Bitmap或Image,我得到了"' ReportRunner.Properties.Resources'不包含' pa_logo_notap'"

的定义

这似乎是基于我阅读here的合理代码,但似乎必须将图像明确标记为此工作的资源。我该如何做到这一点?

更新

我试过了:

var logoRange = _xlSheet.Range[
                    _xlSheet.Cells[1, LOGO_FIRST_COLUMN], 
                    _xlSheet.Cells[5, LOGO_LAST_COLUMN]];
//System.Drawing.Bitmap logo = 
    //ReportRunner.Properties.Resources.pa_logo_notap.png;
System.Drawing.Image logo = 
    ReportRunner.Properties.Resources.pa_logo_notap.png;
_xlSheet.Paste(logoRange, logo);

...但我不仅得到了一个确认信息,关于被粘贴的项目与插入的地方大小和形状不同,我是否真的想要这样做,它还插入了一些看似不相关的文本(" avgOrderAmountCell.Style")而不是图像。

更新2

好的,我试过了:

System.Drawing.Image logo = (System.Drawing.Image)ReportRunner.Properties.Resources.ResourceManager.GetObject("pa_logo_notag.png");
_xlSheet.Paste(logoRange, logo);

...但是," 无法转换类型'字符串'到' System.Drawing.Image '在该代码的第二行。

更新3

这有效:

Assembly myAssembly = Assembly.GetExecutingAssembly();
System.Drawing.Image logo = (System.Drawing.Image)myAssembly.GetName().Name + ".pa_logo_notap.png";
Clipboard.SetDataObject(logo, true);
_xlSheet.Paste(logoRange, logo);

...但我并不为此疯狂,因为我正在使用表单上的图像,并将图像传递给此类的构造函数。当应该可以将图像存储为资源并且只加载资源时,传递图像似乎有点傻。尽管如此,我仍然无法使用这种方法......

更新4

我认为我会坚持使用我所拥有的(在更新3中),因为这样,因此:

private System.Drawing.Image _logo;
. . .
_logo = logo; // logo (the image) is passed in an overloaded constructor
. . .
var logoRange = _xlSheet.Range[
    _xlSheet.Cells[1, LOGO_FIRST_COLUMN], _xlSheet.Cells[6, 
    LOGO_LAST_COLUMN]];
Clipboard.SetDataObject(_logo, true);
_xlSheet.Paste(logoRange, _logo);

...失败," ' null'对于'流' "

无效

1 个答案:

答案 0 :(得分:1)

您已将图像的构建操作更改为嵌入资源。

然后你可以参考:

<强>已更新

 Assembly myAssembly = Assembly.GetExecutingAssembly();
 Stream myStream = myAssembly.GetManifestResourceStream( myAssembly.GetName().Name + ".images.pa_logo_notap.png");
  Bitmap bmp = new Bitmap(myStream);

enter image description here