Добавить изображение в Base64 Encoded ImageStream в ресурсах (resx) - PullRequest
5 голосов
/ 14 июня 2010

Я работаю над старым проектом, обновляю его. Часть программы имеет набор инструментов с множеством кнопок, каждая с изображением. Я обнаружил, что изображения хранятся в виде потока изображений в кодировке Base64 в формате resx для формы и доступны следующим образом:

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
...
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
...
this.toolStrip1.ImageList = this.imageList1;
...
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
...
this.toolStripButton1.ImageIndex = 0;  //There are 41 images, so this can be between 0 and 40

Мне нужно добавить еще одну кнопку с новым изображением. Как я могу добавить изображение в этот поток?

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

Я всегда мог бы просто добавить новый ресурс изображения отдельно от потока, но это делало бы эту одну кнопку другой, и, таким образом, это создавало бы проблемы с согласованностью, вызывая проблемы с поддержкой позже. Поэтому мне интересно, есть ли какой-либо способ для меня, чтобы отредактировать imagetream. Я могу получить доступ к необработанной строке base64, но не знаю, куда идти.

Ответы [ 2 ]

5 голосов
/ 14 июня 2010

Я нашел способ сделать это, используя код:

imageList1.Images.Add( NEWIMAGE );
ResXResourceWriter writer = new ResXResourceWriter("newresource.resx");
writer.AddResource("imageList1.ImageStream",imageList1.ImageStream);
writer.Generate();
writer.Close();
writer.Dispose();

Код запишет обновленный ImageStream в новый файл ресурсов. Затем я могу скопировать его в мой текущий файл ресурсов.

5 голосов
/ 14 июня 2010
  • Создайте еще одну форму.
  • Добавьте компонент ImageList.
  • Добавьте произвольное изображение, чтобы сгенерировать "imagestream".
  • Откройте старый resx ископируйте элемент "value".
  • Откройте новый resx и вставьте элемент value.
  • Откройте новую форму.
  • Добавьте изображения по мере необходимости.
  • Сохраните новыйформа.
  • Открытие файла resx новой формы.
  • Копирование элемента значения.
  • Открытие файла resx старой формы.
  • Вставка в элемент нового значения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...