C#参数'picture'必须是可以用作Icon的图片

时间:2012-04-26 12:19:29

标签: c# winforms visual-studio-2010 icons

我无法将图标导入我的应用程序。我有一个主要表单,我尝试通过Icon中的Properties字段向其导入一个新图标。

图片已采用.ico格式:this is the link to the icon I'm trying to use

有谁知道为什么Microsoft Visual Studio会显示此错误?

Argument 'picture' must be a picture that can be used as an Icon

任何帮助都会很棒。

4 个答案:

答案 0 :(得分:25)

我最近遇到了这个错误。一些建议:

  • 确保图标为方形(16x16,32x32)
  • 尝试将其保存到PNG并使用此免费服务进行转换:http://www.convertico.com/

答案 1 :(得分:7)

我们有一个应用程序可以在99%的计算机上正常运行,但在一台笔记本电脑中它会弹出这个错误。

看起来我们的问题是笔记本电脑用户将屏幕文字/图像大小设置为150%。这可能导致其他工作图像不再工作。我们将看看这是否有效。

<强>更新

评论者似乎也有同样的问题。是的,我们通过将屏幕文本大小设置为小于150%来解决此问题。

答案 2 :(得分:5)

第二次重启然后打开并重新保存.ico自己在Gimp中,然后我能够导入它而没​​有任何错误。不太确定导致这个问题的原因,但这只是一个怪异的错误。

答案 3 :(得分:0)

Xiaohuan ZHOU中的答案记入this question。此功能可无损地将PNG(包括透明度)转换为.ICO文件格式。

public void ConvertToIco(Image img, string file, int size)
{
    Icon icon;
    using (var msImg = new MemoryStream())
    using (var msIco = new MemoryStream())
    {
        img.Save(msImg, ImageFormat.Png);
        using (var bw = new BinaryWriter(msIco))
        {
            bw.Write((short)0);           //0-1 reserved
            bw.Write((short)1);           //2-3 image type, 1 = icon, 2 = cursor
            bw.Write((short)1);           //4-5 number of images
            bw.Write((byte)size);         //6 image width
            bw.Write((byte)size);         //7 image height
            bw.Write((byte)0);            //8 number of colors
            bw.Write((byte)0);            //9 reserved
            bw.Write((short)0);           //10-11 color planes
            bw.Write((short)32);          //12-13 bits per pixel
            bw.Write((int)msImg.Length);  //14-17 size of image data
            bw.Write(22);                 //18-21 offset of image data
            bw.Write(msImg.ToArray());    // write image data
            bw.Flush();
            bw.Seek(0, SeekOrigin.Begin);
            icon = new Icon(msIco);
        }
    }
    using (var fs = new FileStream(file, FileMode.Create, FileAccess.Write))
    {
        icon.Save(fs);
    }
}