Файл .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, но я не мог понять, как сделать преобразование. Является ли эта презумпция правильной или есть другая проблема?
Ответы
Ответ 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.
Свободно и легко.
Ответ 4
Хороший ресурс по этому вопросу в С# 2.0 Преобразование растрового изображения в значок.
Ответ 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;
}