以编程方式编辑特定分辨率的图标

时间:2013-09-09 08:10:02

标签: c# winforms icons

在我的winforms应用程序中,我可以使用this.Icon更改任务栏图标,但这也会更改标题栏中的应用程序图标。

这就是我目前正在编辑图标的方式:

public static Icon GetIcon(string text)
{
    //Create bitmap, kind of canvas
    Bitmap bitmap = new Bitmap(32, 32);

    Icon icon = new Icon(@"<icon-location>");
    System.Drawing.Font drawFont = new System.Drawing.Font("Calibri", 12, FontStyle.Bold);
    System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Orange);

    System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);

    graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
    graphics.DrawIcon(icon, 0, 0);
    graphics.DrawString(text, drawFont, drawBrush, 20, 15);


    Icon createdIcon = Icon.FromHandle(bitmap.GetHicon());

    drawFont.Dispose();
    drawBrush.Dispose();
    graphics.Dispose();
    bitmap.Dispose();

    return createdIcon;
}

在需求发生变化之前,这不是问题,现在只需更改任务栏图标而不更改标题栏(左上角应用程序窗口)图标。

经过一些搜索,我遇到了这个answer,它基本上表明正在使用不同的分辨率在不同的地方显示图标。该答案中提到的“Greenfish Icon Editor Pro”工作得很好但我的编辑工作需要在运行时完成,因为它被用作通知方法来通知用户未读通知的数量,因此它不是一次性编辑。

我意识到我需要更改图标的64x64以实现我的目标,但到目前为止,我能够做的就是一起更改图标。

无论如何我可以编辑 GetIcon()功能来编辑特定的图标分辨率吗? (或者至少建议采用替代方法)

1 个答案:

答案 0 :(得分:2)

你问的是:

如何以编程方式创建多个图标?

.NET的标准Icon类没有提供任何执行此功能的能力,因为.NET没有ICON编码器,请参阅this article以获取证明。

顺便说一句,你可以创建一个只需创建自己的编码器的multiIcon,幸运的是你不需要这样做,因为有一些好的撒玛利亚人已经做过了。一些可能有用的链接:

希望这有帮助。