Аргумент picture должен быть рисунком который можно использовать как icon
Перейти к содержимому

Аргумент picture должен быть рисунком который можно использовать как icon

  • автор:

Аргумент picture должен быть рисунком который можно использовать как icon

А весь список иконок как получить?

Добавлено @ 14:44
Делаю так:

Код
System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile(@»D:\Proga.exe»);
Stream stream = asm.GetManifestResourceStream(«Images.calendar.ico»); Icon icon = new Icon(stream);
Цитата(IEZ @ 31.8.2007, 15:33 /findpost.gif’ onclick=’return getPost(1243195);’ />)
Добавлено @ 15:44
Делаю так:
Код
System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile(@»D:\Proga.exe»);
Stream stream = asm.GetManifestResourceStream(«Images.calendar.ico»); Icon icon = new Icon(stream);

это из-за неправильного имени ресурса, обычно в начале его написан namespase (MyAssembly.Images.Icons.myIcon)
для получения всех иконок (только имей в виду, что в ресурсах могут быть не только иконки!)

Код
foreach (string resourceName in assembly.GetManifestResourceNames())
Stream iconStream = assembly.GetManifestResourceStream(resourceName);
Icon icon = new Icon(iconStream);
>
Цитата(mihryak @ 31.8.2007, 15:01 /findpost.gif’ onclick=’return getPost(1243229);’ />)
это из-за неправильного имени ресурса, обычно в начале его написан namespase (MyAssembly.Images.Icons.myIcon)
Цитата(tol05 @ 31.8.2007, 15:35 /findpost.gif’ onclick=’return getPost(1243274);’ />)
string[] resourceNames = assembly.GetManifestResourceNames();

Я уже перебрал все пути.

Цитата(mihryak @ 31.8.2007, 15:01 /findpost.gif’ onclick=’return getPost(1243229);’ />)
Icon icon = new Icon(iconStream);

Иконка формы: Аргумент ‘picture’ должен быть рисунком, который можно использовать как Icon

Здравствуйте! столкнулся вот с такой проблемой: когда изменял в настройках формы в c# значение Icon «вылетела» ошибка: «Аргумент ‘picture’ должен быть рисунком, который можно использовать как Icon.», хотя формат изображения — «.ico» и размер 32×32. Как быть?

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

Ответы с готовыми решениями:

Какого типа должен быть 3-ий аргумент функции make_heap?
make_heap(Iterator first,Iterator last,Compare comp); Так вот: "Как написать 3-ий параметр?" Я.

Аргумент командной строки должен быть SMTP-хостом
Взял с сайта Microsoft пример отправки сообщений электронной почты: #using <System.dll> using.

Кнопки с рисунком (CommandButton.Picture)
кнопку разрисовал вот так (из Face_ID) .Picture =.

Как из DLL, в котором есть только DllGetClassObject, обратиться к методу, который должен быть в этой DLL?
Есть метод ITaskbarList3::SetProgressState, он предназначен для того, чтобы в значке программы.

Аргумент picture должен быть рисунком который можно использовать как icon

Те, кто писал на Delphi, знает (или помнит), что Delphi сохраняет образы .ico и .bmp, сопоставленные со свойствами компонентов формы, в виде набора строк, например

 Glyph.Data =

Мне эти данные приходят с другого источника.
Вопрос — как этот набор загрузить в Icon?
Пытаюсь делать стандартно:

string buffer; // это исходный набор строк в виде одной строки . var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(buffer)); try < var icon = new Icon(memoryStream); > catch (Exception ex)

Получаю Exception «Аргумент ‘picture’ должен быть рисунком, который можно использовать как Icon».
Кодировку менять пробовал, загружать в Bitmap тоже.

Re: Как загрузить иконку из набора строк?

От: samius http://sams-tricks.blogspot.com
Дата: 14.05.13 05:38
Оценка: +1

Здравствуйте, mDmitriy, Вы писали:

D>Получаю Exception «Аргумент ‘picture’ должен быть рисунком, который можно использовать как Icon».

D>Кодировку менять пробовал, загружать в Bitmap тоже.
Кодировка тут непричем. Кодировка это о том, как представлена строка. Здесь же наоборот, строкой представлены байты.
Полагаю что каждые 2 значимых (не whitespace) символа строки представляют байт данных иконки. Нужно развернуть руками. Получившиеся байты могут быть как результатом сохранения иконки в каком-то формате (.ico, .png), либо просто двоичные данные растра (тогда надо не вчитывать иконку из потока, а создавать иконку и заполнять ее пиксели). Склоняюсь ко второму. Но что бы знать наверняка — надо ковыряться в Delphi исходниках, либо в инете.
Одно точно: менять кодировку — тупик.

Re: Как загрузить иконку из набора строк?

От: Аноним
Дата: 14.05.13 06:12
Оценка:

Re: Как загрузить иконку из набора строк?

От: akasoft
Дата: 14.05.13 06:29
Оценка: 2 (1)

Здравствуйте, mDmitriy, Вы писали:

D>Вопрос — как этот набор загрузить в Icon?

Это строковое представление двоичных данных.
По правилам Дельфи первые 4 байта — размер данных, следующих далее.
Всё замечательно преобразуется, например:

using System; using System.Globalization; using System.IO; namespace ConsoleApplication < class Program < static void Main(string[] args) < var fs = new FileStream("result.ico", FileMode.Create); var src = "EE000000424DEE0000000000000076000000280000000F0000000F000000010004000000000078000000000000000000000010000000100000000000000000008000008000000080800080000000800080008080000080808000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF001111111111111110111111101111111011111100111111101111108011111110111108801111111011108880111111101108888000000110108888888888811011F88880FFFFF110111F8880111111101111F8801111111011111F8011111110111111F01111111011111110111111101111111111111110"; var len = src.Length / 2; for (var i = 4; i < len; i++) < var b = src.Substring(i*2, 2); var n = int.Parse(b, NumberStyles.HexNumber); fs.WriteByte((byte)n); > fs.Close(); > > >

Re[2]: Как загрузить иконку из набора строк?

От: mDmitriy
Дата: 14.05.13 09:08
Оценка:

Здравствуйте, akasoft, Вы писали:

Спасибо, это работает, но мне приходит вот такая строка

Qk02BAAAAAAAADYAAAAoAAAAEAAAABAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAA7Ozs AJORkQCUi4sAoI6LAJeOjgCVlZgAv7KvAMvGxADAvr4AoZ2dAIyIiQCOiooAj4uLAIqFhQCSjI0A 4N7fALe0tABcVlYAJSUnAAAhMQAAgZAAAI+1AB4zUwBvVk4Ab2loAEpDQgBWUFAAZ2JiAGhhYQBk X2AAMyssAKunpwDGxMQA0b28AEOLnQAAy+cAAOj/AADI/wAAhuMAKkVeAHBjXwB0bm4AtrSzAL/A wQCoqKoA8/b4AJORjwCopqIAy8nIALuinwAshp8AANz8AADJ8gAAmuMAAKb/AAJLdwCAc2wAwMPD AOLo6QDa3+EA09jZAPj6+wCGgoMAp6OiAMzIyAC4o6EAK3eJAACSsgAAUIQAACprAAB9zQAJUoIA fnaGAMfM3gD///8A////APn//wD///8Agn5+AKejowDJyMcAxL+6AD5FXAAAG2gAADSBAABAigAA LnIABg8mAC0iSQAtJk8AeHWXAOLm8AD///8A////AIN+fgCno6MAx8XGANDMyABPT18AAEJ0AACe sgAAosIAADdlAANLWwAsLEwARTBgABAGMAA/PlUAyc3cAP///wCBfH0Ap6KjAMzIyAC+qqoAMGVy AACy0wAA1f8AAM//AADD7QAA0fgAAXCzACxGfAA0OWsABgIjADY5SwDR1OQAkY6PAKekpQDUzcwA 0LiyAElQVgAAOnIAAEmnAACV4gAA3P8AAMn/AACk/wAAfcQAGy1cACQ3bwAKBikATEdeAGFgaAC1 s7EAp6OmAEhtcwAdqcsAAI/dAAA7dAAAfLQAANr9AADJ/wAWnv8AAHjGABpEdwA0VqMAJjt2AA0K KAAFAAsAwr29ACdlcgAAzeAAAM7/AACf/wAAlPIAAKjmAADO+wAZ0v8AZuP/ACN/wgAaLnUAPGbU ADNapwAkPnoADgkpAF5YZQAXa3wAAOr/AADH/wAAof8AAJr/AALF/wArz/8AWu3/ACr//wBQt8UA eU9wAH+Q3gA0eOEAMFakACY6dAAmIj8AF2t7AAHf/wAMxP8AJcv/ADPT/wBQ5P8AXfn/AB7//wAA //8ACcO+AKdxUQDQoYMAVXWtADVt2gAxVKEANUt8ACJvdAAH6PsAYeT/AHD1/wAr/v8AJP//AAD/ /wAA2dkAAJiaAFqGgwDsw6QA6M2fANvTtAB7mNwAJmrWAEFhpQCwtLMAHqCeACX//wAS//8AAP// AADR0QAJn58AOF1dAE03NgCljY0AusLKALK4wgC9u7oAraWdAFJxtgA5b9wA//z8ALCzsQAgeXgA F3t7ABdubgBOY2MAxbm5AO/d3QDy6OgA6uvrAOLg4ADh3+AA4eDiAOzp4gDi4eEAtsj1AA==

т.е., не хексовая
Re[3]: Как загрузить иконку из набора строк?

От: baranovda
Дата: 14.05.13 09:10
Оценка: 3 (1) +3

Здравствуйте, mDmitriy, Вы писали:

D>Здравствуйте, akasoft, Вы писали:

D>Спасибо, это работает, но мне приходит вот такая строка

Re[4]: Как загрузить иконку из набора строк?

От: mDmitriy
Дата: 14.05.13 09:44
Оценка:

Здравствуйте, baranovda, Вы писали:

B>Здравствуйте, mDmitriy, Вы писали:

D>>Здравствуйте, akasoft, Вы писали:

D>>Спасибо, это работает, но мне приходит вот такая строка

B>Это уже base64
Гениально! Я сам, лошара, мог бы сообразить, увидев два знака == в конце.

 var bytes = Convert.FromBase64String(source); var memoryStream = new MemoryStream(bytes); return new Bitmap(memoryStream);

C# Argument ‘picture’ must be a picture that can be used as an Icon

Argument 'picture' must be a picture that can be used as an Icon

I am having trouble importing an icon into my application. I have a main form and I am trying to import to it a new icon via the Icon field in Properties . The image is already in .ico format: this is the link to the icon I’m trying to use. Does anyone know why Microsoft Visual Studio would be displaying this error? Any help would be great.

28.5k 27 27 gold badges 121 121 silver badges 149 149 bronze badges
asked Apr 26, 2012 at 12:19
Daniel Flannery Daniel Flannery
1,166 8 8 gold badges 23 23 silver badges 51 51 bronze badges
i just tried it on vs2010 and changed my form’s icon and it works..
Apr 26, 2012 at 12:23

It works perfectly, plz paste a screen shot of your error. I even tried in VS 2010 and its working like it is suppose to work

Apr 26, 2012 at 12:30

Here is the error. I would imagine that it should work fine so this has kinda stumped me. i.imgur.com/ueKwJ.jpg

Apr 26, 2012 at 12:34

The icon must be already in a size that is supported. Make a new icon manually in VS to see all the sizes that are supported. What size is your icon?

Apr 26, 2012 at 12:43

The icon I was trying to import was 32 x 32 which is the same size as the default Icon. I have tried making one myself to check supported sizes and 32 x 32 is not a problem.

Apr 26, 2012 at 12:53

5 Answers 5

I had this error recently. Some recommendations:

  • make sure the icon is square (16×16, 32×32)
  • try saving it to a PNG and using this free service for conversion : http://www.convertico.com/

answered May 31, 2012 at 3:50
Wingman4l7 Wingman4l7
649 1 1 gold badge 8 8 silver badges 23 23 bronze badges

I used convertico to convert a png to ico but was still getting this error. Tried with a different icon and it worked.

Oct 6, 2013 at 10:52

The error occurs if the .ICO file is corrupted, which may happen if, for example, apple.png is renamed to apple.ico. Therefore, it’s not a valid .ICO file. Converters like the one you mentioned solve the problem because they don’t change file format but convert it instead.

Sep 28, 2020 at 0:25

We have an application that works fine on 99% of our computers, but in one laptop it pops out this error.

It looks like our issue is that the laptop user set the screen text/image size to 150%. This could cause otherwise working images no longer working. We will see whether this works.

UPDATE

A commenter seems to have the same problem. And yes, we resolved this problem by setting the screen text size to less than 150%.

answered Jul 15, 2014 at 5:23
Earth Engine Earth Engine
10.1k 5 5 gold badges 49 49 silver badges 79 79 bronze badges

After a second restart and then opening and re-saving the .ico myself in Gimp, then I was able to import it without any errors. Not too sure what caused this problem but it was just a freak error.

53.1k 59 59 gold badges 191 191 silver badges 278 278 bronze badges
answered Apr 30, 2012 at 7:49
Daniel Flannery Daniel Flannery
1,166 8 8 gold badges 23 23 silver badges 51 51 bronze badges
No restart required for me. Simply open then save with Gimp.
Apr 15, 2016 at 20:32
restart had no effect here either, but saving in Gimp did it.
Dec 19, 2017 at 23:40

Credits to Xiaohuan ZHOU for the answer in this question. This function losslessly converts PNG (including transparency) to .ICO file format.

public void ConvertToIco(Image img, string file, int size) < Icon icon; using (var msImg = new MemoryStream()) using (var msIco = new MemoryStream()) < img.Save(msImg, ImageFormat.Png); using (var bw = new BinaryWriter(msIco)) < bw.Write((short)0); //0-1 reserved bw.Write((short)1); //2-3 image type, 1 = icon, 2 = cursor bw.Write((short)1); //4-5 number of images bw.Write((byte)size); //6 image width bw.Write((byte)size); //7 image height bw.Write((byte)0); //8 number of colors bw.Write((byte)0); //9 reserved bw.Write((short)0); //10-11 color planes bw.Write((short)32); //12-13 bits per pixel bw.Write((int)msImg.Length); //14-17 size of image data bw.Write(22); //18-21 offset of image data bw.Write(msImg.ToArray()); // write image data bw.Flush(); bw.Seek(0, SeekOrigin.Begin); icon = new Icon(msIco); >> using (var fs = new FileStream(file, FileMode.Create, FileAccess.Write)) < icon.Save(fs); >> 

answered Sep 28, 2020 at 0:35
Stefan Đorđević Stefan Đorđević
565 1 1 gold badge 4 4 silver badges 22 22 bronze badges

The code from the creation of icon and later can simply be replaced with File.WriteAllBytes(file, msIco.ToArray()); . I basically did that, and was lazy and just dumped this into some code I was already working on. Note: I also instantiated bw slightly differently: using (var bw = new BinaryWriter(msIco, Encoding.ASCII, true)) , because I was getting nulls elsewhere, but that may be specific to my code I spliced this into: the true at the end keeps the stream open when the binary writer disposes. Either way, this is helpful code, good reference.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *