ENERGY Опубликовано 9 апреля, 2017 Поделиться Опубликовано 9 апреля, 2017 (изменено) Динамически добавляю картинки, - thumbnails в ImageList для дальнейшего отображения в ListView. Некоторые картинки через время не нужны, как корректно удалить картинку из TImageList, чтобы освободить память? При добавлении картинка добавляется в 3 списка Source.Add, Destination.Add и Destination.Layers.Add, получается ее нужно удалять с этих 3 списков? Спасибо. Добавляю картинку так: Скрытый текст type TImageListHelper = class helper for TImageList function Add(aBitmap: TBitmap): integer; end; function TImageListHelper.Add(aBitmap: TBitmap): integer; const SCALE = 1; var vSource: TCustomSourceItem; vBitmapItem: TCustomBitmapItem; vDest: TCustomDestinationItem; vLayer: TLayer; begin Result := -1; if (aBitmap.Width = 0) or (aBitmap.Height = 0) then exit; // add source bitmap vSource := Source.Add; vSource.MultiResBitmap.TransparentColor := TColorRec.Fuchsia; vSource.MultiResBitmap.SizeKind := TSizeKind.Source; vSource.MultiResBitmap.Width := Round(aBitmap.Width / SCALE); vSource.MultiResBitmap.Height := Round(aBitmap.Height / SCALE); vBitmapItem := vSource.MultiResBitmap.ItemByScale(SCALE, True, True); if vBitmapItem = nil then begin vBitmapItem := vSource.MultiResBitmap.Add; vBitmapItem.Scale := Scale; end; vBitmapItem.Bitmap.Assign(aBitmap); vDest := Destination.Add; vLayer := vDest.Layers.Add; vLayer.SourceRect.Rect := TRectF.Create(TPoint.Zero, vSource.MultiResBitmap.Width, vSource.MultiResBitmap.Height); vLayer.Name := vSource.Name; Result := vDest.Index; end; ImageList1.Add(MyBitmap); Изменено 9 апреля, 2017 пользователем ENRGY Цитата Ссылка на комментарий
0 ENERGY Опубликовано 11 апреля, 2017 Автор Поделиться Опубликовано 11 апреля, 2017 @RoschinSpb пожалуйста, возможно вы подскажете как оптимальнее это сделать? Нужно удалять картинки, т.к. они загружаются на Dropbox, и затем удаляются из ListView и из TImageList. Цитата Ссылка на комментарий
1 RoschinSpb Опубликовано 13 апреля, 2017 Поделиться Опубликовано 13 апреля, 2017 Ломать не строить, здесь нет ни каких сложностей.TImageList содержит две коллекции Source и Destination. Удаляете из них Item`ы как из обычных коллекций TCollection с помощью методов Delete и Clear. В Source находятся сами изображения, в Destination ссылки на Source. Если удалите только из Source, то в нумерация изображений не поменяется и останутся пустые элементы, хотя расход памяти уменьшится. Если удалите только из Destination, то нумерация картинок съедет, и расход памяти почти не изменится. Каждый элемент Destination может содержать несколько ссылок на Source это коллекция Layers, из которой точно также можно удалять элементы. dnekrasov и ENERGY 2 Цитата Ссылка на комментарий
Вопрос
ENERGY
Динамически добавляю картинки, - thumbnails в ImageList для дальнейшего отображения в ListView.
Некоторые картинки через время не нужны, как корректно удалить картинку из TImageList, чтобы освободить память?
При добавлении картинка добавляется в 3 списка Source.Add, Destination.Add и Destination.Layers.Add, получается ее нужно удалять с этих 3 списков?
Спасибо.
Добавляю картинку так:
Ссылка на комментарий
2 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.