Изображения для ImageList

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

PAVEL_USER
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.10.2006 (Пт) 18:04

Изображения для ImageList

Сообщение PAVEL_USER » 02.08.2009 (Вс) 19:39

Привет всем!

Заполняю ImageList уменьшенными изображениями следующим образом:

Код: Выделить всё
Dim IL As New ImageList, size As System.Drawing.Size = New Size(180, 180)
IL.ImageSize = size

LV.LargeImageList = IL  'LV - ListView
Dim p As New PictureBox
Dim bm As Bitmap = New Bitmap(size.Width, size.Height)
p.SizeMode = PictureBoxSizeMode.Zoom
p.Width = size.Width : p.Height = size.Height
p.Image = Image.FromFile(...)

p.DrawToBitmap(bm, New Rectangle(0, 0, size.Width, size.Height))
IL.Images.Add(i, bm)
LV.Items.Add(..., i)

p.Image.Dispose()
p.Dispose()
bm.Dispose()


Подскажите пожалуйста, как можно ускорить процесс создания мини-изображений, есть ли другие оптимальные способы?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Изображения для ImageList

Сообщение Nord777 » 02.08.2009 (Вс) 23:23

посмотри функцию GetThumbnailImage класса Image
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

PAVEL_USER
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.10.2006 (Пт) 18:04

Re: Изображения для ImageList

Сообщение PAVEL_USER » 03.08.2009 (Пн) 9:54

Спасибо за предложение, получение изображения, функцией GetThumbnailImage и добавление в ImageList происходит немного быстрее, но теряются пропорции картинки. Для избежания этого, я использую:

Код: Выделить всё
...
p.SizeMode = PictureBoxSizeMode.Zoom
...
p.DrawToBitmap(bm, New Rectangle(0, 0, size.Width, size.Height))
...


Так что пока ничего не могу найти, чтобы заставть работать быстрее :(

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Изображения для ImageList

Сообщение Nord777 » 03.08.2009 (Пн) 13:29

Пример, в котором все картинки из папки отображаются в ListView.

Код: Выделить всё
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Dim sz As System.Drawing.Size = New Size(180, 180)
      Dim DestRect As Rectangle
      Dim im As Image, bm As Bitmap
      Dim IL As New ImageList
      Dim indx As Integer

      IL.ColorDepth = ColorDepth.Depth32Bit
      IL.ImageSize = sz
      LV.LargeImageList = IL

      Dim Files() As String = IO.Directory.GetFiles("E:\DOC\Мои рисунки\Картинки", "*.png")

      'LV.BeginUpdate()
      For Each fn As String In Files
         bm = New Bitmap(sz.Width, sz.Height)
         Using G As Graphics = Graphics.FromImage(bm)
            im = Image.FromFile(fn)
            DestRect = GetDestRect(sz.Width, sz.Height, im)
            G.DrawImage(im, DestRect, 0, 0, im.Width, im.Height, GraphicsUnit.Pixel)
         End Using
         IL.Images.Add(bm)
         LV.Items.Add(fn, indx)
         indx += 1
      Next
      'LV.EndUpdate()

   End Sub


   Function GetDestRect(ByVal destW%, ByVal destH%, ByVal im As Image) As Rectangle
      Dim R As New Rectangle
      Dim k As Double = (im.Width / im.Height)

      If k >= 1.0# Then
         R.Height = destH / k
         R.Width = destW
         R.Y = (destH - R.Height) / 2
      Else
         R.Width = destW * k
         R.Height = destH
         R.X = (destW - R.Width) / 2
      End If

      Return R
   End Function
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

PAVEL_USER
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.10.2006 (Пт) 18:04

Re: Изображения для ImageList

Сообщение PAVEL_USER » 03.08.2009 (Пн) 14:20

Спасибо за помощь! :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList