imageList.Draw не рисует с другим размером? - PullRequest
1 голос
/ 19 января 2011

В ImageList есть метод с именем «Draw»:

imageList.Draw(graphics, bounds.X, bounds.Y, bounds.Width, bounds.Height, imgIndex);

Я использую этот метод для рисования изображения на графическом объекте PrintDocument .При использовании исходного размера изображения (16 x 16 пикселей) изображение отображается правильно.Однако, если я изменяю размер границ, ничего не рисуется.Даже изменение размера до 32 х 32 (двойной размер) не имеет никакого эффекта.Ничего не нарисовано.Мне нужно изменить нарисованный размер из-за разницы в точках на дюйм ... Где я ошибаюсь?

Редактировать: Решение, похоже, заключается в простом использовании метода g.DrawImage.Почему imageList.Draw () не рисует, для меня все еще остается загадкой ...

g.DrawImage(imageList.Images[imgIndex], bounds);

1 Ответ

7 голосов
/ 19 января 2011

ImageList.Draw () немного необычен, он использует встроенную поддержку, которую имеет собственный код списка изображений в Windows для рендеринга изображения в списке.Это оптимизация, позволяющая избежать затрат на преобразование внутреннего изображения, сохраненного в собственном списке изображений, обратно в управляемый объект Image.

Однако одним побочным эффектом является то, что этот рисунок происходит независимо от любого изпреобразования, которые были применены к графическому объекту.Изображение 16x16 в списке будет отображаться на бумаге размером 16x16 пикселей.Что на самом деле немного сложно найти, принтеры имеют очень высокое разрешение (обычно 600 точек на дюйм), это изображение превращается в десятичную точку.

Списки изображений действительно должны были быть источником изображений дляЭлементы управления TreeView и ListView не являются хорошим объектом коллекции общего назначения для изображений.Как List<Image>.Ваш обходной путь хорош, свойство Image преобразует внутреннее растровое изображение обратно в управляемое изображение, Graphics.DrawImage () затем масштабирует его соответствующим образом, чтобы получить размер на бумаге, близкий к размеру на экране.Однако с зернистостью вы получаете от создания изображения в 6 раз больше.Обратите внимание, что вы должны Dispose () этот объект.

...