Подтвердить что ты не робот

Файл .PNG. Хотите, чтобы вложенный файл значков отображался как значок в строке заголовка формы

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Ответ модели на этот вопрос будет следующим:

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 имеют более одного бита прозрачности. Этот тип проблемы можно решить с помощью библиотеки, например этот.

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

Ответ 3

Перейдите сюда:

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

И здесь:

Paint.NET ico Plugin (бесплатно)

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

Свободно и легко.

Ответ 5

Это сработало для моих целей, поскольку все мои ресурсы были 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;
}