Мне нужно рисовать 32-битные изображения PNG с полупрозрачными пикселями, загруженными в элемент управления ImageList на графике, когда прямоугольники клипа могут быть применены к этому чертежу. Оказалось, что я не могу сделать это с помощью метода Graphics.DrawImage () . Полупрозрачные пиксели просто стали серыми, когда я попытался вызвать некоторые перегруженные версии Graphics.DrawImage
.
. Например, посмотрите на следующую картинку:
Изображение выше было создано с помощью следующего переопределенного метода OnPaint вида:
protected override void OnPaint(PaintEventArgs e)
{
imageList1.Draw(e.Graphics, 10, 30, 0);
e.Graphics.DrawImage(imageList1.Images[0], 10, 90);
base.OnPaint(e);
}
Как видите, первый ImageList.Draw () основан на методе в Win32 API функция ImageList_DrawEx правильно отображает полупрозрачные пиксели, а методы GDI + Graphics - нет. Я был бы рад использовать ImageList.Draw
, поскольку он работает правильно, но прямоугольники клипа GDI + не работают с ним (из-за его природы GDI).
Есть ли способ рисования 32-битных изображений PNG с полупрозрачными пикселями правильно с чистыми методами GDI +, если они могут быть ограничены прямоугольниками клипа GDI +?
Если это может помочь, я загрузил изображение в элемент управления ImageList во время разработки следующим образом:
- Уронил элемент управления
ImageList
на поверхность дизайнера. - Установите для свойства
ColorDepth
значение Depth32Bit
. - Установите свойство
ImageSize
(48, 48
для этого значка теста). - Нажмите кнопку с многоточием в редакторе свойства
Images
и добавили значок в Редакторе коллекции изображений с помощью кнопки Добавить.
Тестовый значок мобильного телефона размером 48x48, который я использовал, можно загрузить с этого источника .