WinForms: ImageList для ListView с различными размерами изображений - PullRequest
1 голос
/ 03 декабря 2011

У меня есть ListView со свойством View, установленным на LargeIcon. И у меня есть ImageList в качестве источника изображения для ListView.

Я хочу, чтобы в ListView отображались как вертикально, так и горизонтально ориентированные изображения, но у ImageList есть только одно свойство ImageSize для всех изображений в его коллекции, например, если я установлю это свойство на 150x100 и добавлю вертикальное изображение (100x150) для коллекции - ListView автоматически растягивает его до 150x100.

Так что, как я понимаю, мне нужен ImageList, в котором каждое изображение хранится с его оригинальным размером. Есть мысли о том, как это сделать? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2014

Чтобы избежать растяжения, вы можете использовать кросс-умножение.

  Image Width       Desired Width
 --------------- = ---------------
  Image Height       New Height

или

  Image Width       New Width
--------------- = ---------------
 Image Height       Desired Height

В коде это выглядит примерно так

int height = img.Width*newWidth/image.Height;

или

int height = img.Width/image.Height*newWidth;

и

int width = img.Height*newHeight/image.Width;

или

int width = img.Height/image.Width*newHeight;

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

0 голосов
/ 03 декабря 2011

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

взгляните на эти два изображения, которые я создал в качестве примера.

this is the original 64x64 image file

но я делаю так, чтобы не растягиваться:

this is the 200x200 image file that have lots of transparent area

...