web-dev-qa-db-ja.com

.PNGファイルを取得しました。埋め込まれたアイコンリソースをフォームのタイトルバーにアイコンとして表示したい

これはインタビューの質問でした。 Visual Studio 2008と.PNGファイルとして保存されたアイコンを考えると、埋め込みリソースとして画像を使用し、フォームのタイトルバー内のアイコンとして使用する必要がありました。

この質問に対するモデルの答えとなるものを探しています。両方の(動作している!)コードとVisual Studioのトリック。 (モデルの回答は、次に出会ったときに仕事が得られるはずです。)

具体的には、埋め込みリソースになった画像を読み込む方法や、タイトルバーのアイコンとして取得する方法がわかりません。

一部のソリューションとして、埋め込みビットを無視して、リソースを出力ディレクトリにコピーし、次のことを試しました:

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

これは、「引数「画像」はアイコンとして使用できる画像でなければなりません」というエラーで失敗しました。

.PNGファイルは実際には.ICOである必要があると思いますが、変換方法がわかりませんでした。この推定は正しいですか、それとも別の問題がありますか?

34
David Max

VSを起動し、新しいWindowsアプリケーションを起動します。プロパティシートを開き、.pngファイルをリソースとして追加します(この例ではglider.png)。これ以降、WindowsFormsApplication10.Properties.Resources.gliderとしてビットマップファイルとしてリソースにアクセスできます。

アプリケーションアイコンとして使用するためのコード:

 public Form1()
        {
            InitializeComponent();
            Bitmap bmp = WindowsFormsApplication10.Properties.Resources.glider;
            this.Icon = Icon.FromHandle(bmp.GetHicon());
        }
63
Silver Dragon

その質問に対するモデルの答えは次のとおりです。

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で問題を引き起こします。このタイプの問題は this one のようなライブラリで解決できます。

可能性は彼らがその方法を知らず、潜在的な従業員から答えを絞り込もうとしていたことです。さらに、PNGからフォームのアイコンを設定することは、パフォーマンスに大きな影響を与えます。そもそもICOであったはずです。

26

ここに行く:

http://www.getpaint.net/ (無料)

そしてここ:

Paint.NET icoプラグイン (無料)

Paint.NETをインストールします。 icoプラグイン(2番目のリンク)をPaint.NET\FileTypesフォルダーに配置します。 Paint.NETを起動します。 .pngを開き、.icoとして保存します。

無料で簡単。

16
Kelly

C#2.0 Convert Bitmap to Iconの主題に関する優れたリソース。

1
Patrik Svensson

すべてのリソースが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;
}
1