得到.PNG文件。想要在表单标题栏上显示为图标的嵌入图标资源

时间:2008-09-30 17:33:23

标签: c# .net winforms

这是一个面试问题。鉴于Visual Studio 2008和保存为.PNG文件的图标,它们需要将图像作为嵌入资源,并用作表单标题栏中的图标。

我正在寻找这个问题的模型答案,两个(工作!)代码和任何Visual Studio技巧。 (如果我下次见到它,那么模型答案就应该让我找到工作。)

具体来说,我不知道如果图像是嵌入式资源时如何加载图像,也不知道如何将图像作为标题栏的图标加载。

作为部分解决方案,忽略嵌入位,我将资源复制到ouput目录并尝试以下操作: -

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Icon = new Icon("Resources\\IconImage.png");
    }
}

失败,错误“参数'图片'必须是可以用作图标的图片。”

我认为.PNG文件实际上需要是.ICO,但我看不到如何进行转换。这个假设是正确的还是有不同的问题?

5 个答案:

答案 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)

转到此处:

http://www.getpaint.net/(免费)

在这里:

Paint.NET ico Plugin(免费)

安装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;
}