Вопрос по c# – ImageList: 32-битные изображения теряют качество

6

Я используюImageList заTreeView а такжеListView, Сначала я установил 32-битное качество изображения, а затем добавил полупрозрачные изображения. Качество выглядит нормально, но после пары минут кодирования, компиляции и выполнения приложения качество выглядит плохо.

See screenshot: enter image description here

Используемые свойства

ColorDepth: Depth32Bit
ImageSize: 16; 16
TransparentColor: Transparent

За пикселями есть черные пиксели, которые были полупрозрачными, но не полностью прозрачными.

Повторное добавление всех изображений восстанавливает исходное качество, но через пару минут выглядит как на правой стороне скриншота.

Это VS2010 Ultimate. Я также сначала подумал о загрузке их во время выполнения, но это не такshould быть. Есть еще идеи? bytecode77
Загрузка во время выполнения с ресурса - это именно то, что я бы сделал. Затем я могу выбрать размер, соответствующий масштабированию шрифта. David Heffernan
@ bytecode77 Невозможно ответить в правильной ветке, потому что Ганс Пассант удалил свой ответ. Что касается добавления изображений в список изображений - это довольно странно, взгляните:stackoverflow.com/questions/28902091/32-bit-images-on-imagelist Spook
Какая версия Visual Studio? Бьюсь об заклад, он работает нормально, если вы загружаете список изображений во время выполнения. Вероятно, ошибка в коде VS, который сохраняет / загружает состояние списка изображений во время разработки. David Heffernan

Ваш Ответ

1   ответ
8

что данные альфа-канала теряются, когда изображения сохраняются какImageStream (поведение по умолчанию VS Designer). Так что, если вы можете прекратить использовать Designer для установки изображений вImageListВы можете использовать полупрозрачные изображения доColorDepth.Depth32Bit. It is very inconvenient but it works.

Таким образом, вы можете поместить свои изображения вResources.resx файл, и добавьте их в соответствующем месте в коде. Например, в конструкторе из васUserControl/Formпосле звонкаInitializeComponent() по коду, как это:

  _imageList.Images.Add(Resources.Image32);
  _imageList.Images.SetKeyName(0, "Image32");
  _myButton.Image = 0;

(This info is available in comments to response marked answer, I've added this as answer so it would be harder to miss another available option)

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