这是一个面试问题。鉴于Visual Studio 2008和保存为.PNG文件的图标,它们需要将图像作为嵌入资源,并用作表单标题栏中的图标。
我正在寻找这个问题的模型答案,两个(工作!)代码和任何Visual Studio技巧。 (如果我下次见到它,那么模型答案就应该让我找到工作。)
具体来说,我不知道如果图像是嵌入式资源时如何加载图像,也不知道如何将图像作为标题栏的图标加载。
作为部分解决方案,忽略嵌入位,我将资源复制到ouput目录并尝试以下操作: -
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Icon = new Icon("Resources\\IconImage.png");
}
}
失败,错误“参数'图片'必须是可以用作图标的图片。”
我认为.PNG文件实际上需要是.ICO,但我看不到如何进行转换。这个假设是正确的还是有不同的问题?
答案 0 :(得分:62)
启动VS,启动新的Windows应用程序。打开属性表,将.png文件添加为资源(在此示例中为:glider.png)。从此处,您可以将资源作为位图文件访问,如WindowsFormsApplication10.Properties.Resources.glider
将其用作应用程序图标的代码:
public Form1()
{
InitializeComponent();
Bitmap bmp = WindowsFormsApplication10.Properties.Resources.glider;
this.Icon = Icon.FromHandle(bmp.GetHicon());
}
答案 1 :(得分:24)
该问题的模型答案是:
System.Console.WriteLine("Are you serious?");
System.Console.WriteLine("I think I will try my chances with another employer.");
使用像Google和Stack Overflow这样的资源,您可以在几分钟内在计算机前解决这种问题,解决这样的任务几乎无法了解您是否是一名优秀的开发人员。
Icon.FromHandle会导致PNG出现问题,因为PNG具有多个透明度。可以使用this one等库来解决此类问题。
可能他们不知道该怎么做,他们试图从潜在的员工中榨取答案。此外,从PNG设置表单的图标是一个不受欢迎的性能影响,它本来应该是一个ICO。
答案 2 :(得分:16)
转到此处:
在这里:
安装Paint.NET。将ico插件(第二个链接)放入Paint.NET \ FileTypes文件夹中。启动Paint.NET。打开.png并将其另存为.ico。
自由自在。
答案 3 :(得分:1)
C# 2.0 Convert Bitmap to Icon 中关于此主题的良好资源。
答案 4 :(得分:1)
这适用于我的目的,因为我的所有资源都是PNG文件:
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = CharSet.Auto)]
extern static bool DestroyIcon(IntPtr handle);
// From http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.gethicon.aspx
private Icon bitmapToIcon(Bitmap myBitmap)
{
// Get an Hicon for myBitmap.
IntPtr Hicon = myBitmap.GetHicon();
// Create a new icon from the handle.
Icon newIcon = Icon.FromHandle(Hicon);
return newIcon;
}