Получил файл .PNG. Хотите, чтобы встроенный значок ресурса отображался как значок в строке заголовка формы - PullRequest
33 голосов
/ 30 сентября 2008

Это был вопрос для интервью. Учитывая Visual Studio 2008 и значок, сохраненный в виде файла .PNG, им требовалось изображение в качестве встроенного ресурса и его использование в качестве значка в строке заголовка формы.

Я ищу то, что было бы модельным ответом на этот вопрос, как (работающий!) Код, так и любые хитрости Visual Studio. (Образцовый ответ - тот, который должен получить мне работу, если я увижу ее в следующий раз.)

В частности, я не знаю, как загрузить изображение, если оно является встроенным ресурсом, и не узнать, как его получить в виде иконки для строки заголовка.

Как частичное решение, игнорируя встроенный бит, я скопировал ресурс в выходной каталог и попытался сделать следующее: -

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

Это не удалось с ошибкой «Аргумент 'picture' должен быть изображением, которое можно использовать в качестве значка."

Я предположил, что файл .PNG на самом деле должен был быть .ICO, но я не мог понять, как выполнить преобразование. Это предположение правильно или есть другая проблема?

Ответы [ 5 ]

62 голосов
/ 01 октября 2008

Запустите VS, запустите новое приложение Windows. Откройте страницу свойств, добавьте файл .png в качестве ресурса (в этом примере: glider.png). С этого момента вы можете получить доступ к ресурсу в виде растрового файла как WindowsFormsApplication10.Properties.Resources.glider

Код для использования в качестве иконки приложения:

 public Form1()
        {
            InitializeComponent();
            Bitmap bmp = WindowsFormsApplication10.Properties.Resources.glider;
            this.Icon = Icon.FromHandle(bmp.GetHicon());
        }
24 голосов
/ 01 октября 2008

Типовой ответ на этот вопрос будет:

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 .

Скорее всего, они не знали, как это сделать, и они пытались выдавить ответ из потенциальных сотрудников. Кроме того, установка значка формы из PNG является несущественным ударом по производительности, в первую очередь это должен был быть ICO.

16 голосов
/ 18 марта 2010

иди сюда:

http://www.getpaint.net/ (бесплатно)

А здесь:

Плагин Paint.NET ico (бесплатно)

Установить Paint.NET. Поместите плагин ico (вторая ссылка) в папку Paint.NET \ FileTypes. Запустите Paint.NET. Откройте свой .png и сохраните его как .ico.

Бесплатно и просто.

1 голос
/ 10 апреля 2014

Это сработало для моих целей, поскольку все мои ресурсы были в формате 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 голос
/ 30 сентября 2008
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...