如何将图像作为资源包含在我的项目中?
How can I include an image as a Resource in my project?
我想在我的项目中添加一个图像作为资源,以便我可以引用它以编程方式插入到电子表格的范围中。
我通过右键单击项目并选择“添加”>“现有项目”来添加图像...
我希望图像(.png 文件)随后可以使用此代码获得:
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);
...但是使用位图或图像,我得到,“'ReportRunner.Properties.Resources' 不包含 'pa_logo_notap'”的定义“=16=]
根据我阅读的内容,这似乎是明智的代码 here,但似乎必须将图像明确标记为资源才能使其正常工作。我该如何实现?
更新
我试过这个:
System.Drawing.Image logo = (System.Drawing.Image)ReportRunner.Properties.Resources.ResourceManager.GetObject("pa_logo_notag.png");
_xlSheet.Paste(logoRange, logo);
...但我不仅收到了一条关于粘贴的项目与插入位置大小和形状不同的确认消息,而且我真的想这样做,它也插入了一些看似无关的文本 ("avgOrderAmountCell.Style") 而不是图像。
更新 2
好的,我试过了:
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);
...但是,“无法在该代码的第二行将类型 'string' 转换为 'System.Drawing.Image'。
更新 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);
...但我并不为此疯狂,因为我正在使用表单上的图像,并将图像传递给此 class 的构造函数。当应该可以将图像存储为资源并仅加载资源时,传递图像似乎有点愚蠢。不过,我仍然没有得到该方法的工作...
更新 4
我想我会坚持使用我已有的(在更新 3 中),尽管它很笨拙,因为:
Assembly myAssembly = Assembly.GetExecutingAssembly();
Stream myStream =
myAssembly.GetManifestResourceStream(myAssembly.GetName().Name +
"pa_logo_notap.png");
Bitmap bmp = new Bitmap(myStream);
Clipboard.SetDataObject(bmp, true);
_xlSheet.Paste(logoRange, bmp);
...失败,“'null' 的值对 'stream' 无效”
您已将图像的构建操作更改为嵌入资源。
那你可以参考做:
已更新
Assembly myAssembly = Assembly.GetExecutingAssembly();
Stream myStream = myAssembly.GetManifestResourceStream( myAssembly.GetName().Name + ".images.pa_logo_notap.png");
Bitmap bmp = new Bitmap(myStream);
我想在我的项目中添加一个图像作为资源,以便我可以引用它以编程方式插入到电子表格的范围中。
我通过右键单击项目并选择“添加”>“现有项目”来添加图像...
我希望图像(.png 文件)随后可以使用此代码获得:
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);
...但是使用位图或图像,我得到,“'ReportRunner.Properties.Resources' 不包含 'pa_logo_notap'”的定义“=16=]
根据我阅读的内容,这似乎是明智的代码 here,但似乎必须将图像明确标记为资源才能使其正常工作。我该如何实现?
更新
我试过这个:
System.Drawing.Image logo = (System.Drawing.Image)ReportRunner.Properties.Resources.ResourceManager.GetObject("pa_logo_notag.png");
_xlSheet.Paste(logoRange, logo);
...但我不仅收到了一条关于粘贴的项目与插入位置大小和形状不同的确认消息,而且我真的想这样做,它也插入了一些看似无关的文本 ("avgOrderAmountCell.Style") 而不是图像。
更新 2
好的,我试过了:
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);
...但是,“无法在该代码的第二行将类型 'string' 转换为 'System.Drawing.Image'。
更新 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);
...但我并不为此疯狂,因为我正在使用表单上的图像,并将图像传递给此 class 的构造函数。当应该可以将图像存储为资源并仅加载资源时,传递图像似乎有点愚蠢。不过,我仍然没有得到该方法的工作...
更新 4
我想我会坚持使用我已有的(在更新 3 中),尽管它很笨拙,因为:
Assembly myAssembly = Assembly.GetExecutingAssembly();
Stream myStream =
myAssembly.GetManifestResourceStream(myAssembly.GetName().Name +
"pa_logo_notap.png");
Bitmap bmp = new Bitmap(myStream);
Clipboard.SetDataObject(bmp, true);
_xlSheet.Paste(logoRange, bmp);
...失败,“'null' 的值对 'stream' 无效”
您已将图像的构建操作更改为嵌入资源。
那你可以参考做:
已更新
Assembly myAssembly = Assembly.GetExecutingAssembly();
Stream myStream = myAssembly.GetManifestResourceStream( myAssembly.GetName().Name + ".images.pa_logo_notap.png");
Bitmap bmp = new Bitmap(myStream);