Добавьте изображение к Base64 закодированный ImageStream в ресурсах (resx)

Я работаю над более старым проектом, обновляя его. Часть программы имеет toolstrip со многими кнопками на нем, каждым с изображением. Я нашел, что изображения хранятся в Base64, закодировал imagestream в 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

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

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

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

5
задан NickAldwin 14 June 2010 в 16:45
поделиться

2 ответа

  • Создайте другую форму.
  • Добавьте компонент ImageList.
  • Добавьте произвольное изображение для создания "imagestream".
  • Откройте старый resx и скопируйте элемент "value".
  • Откройте новый resx и вставьте элемент "value".
  • Откройте новую форму.
  • Добавьте изображения по мере необходимости.
  • Сохраните новую форму.
  • Откройте resx-файл новой формы.
  • Скопируйте элемент значения.
  • Откройте resx-файл старой формы.
  • Вставьте новый элемент значения.
5
ответ дан 13 December 2019 в 22:02
поделиться

Я нашел способ сделать это с помощью кода:

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

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

5
ответ дан 13 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: