Я сделал что-то подобное с Delphi 2006.
TImageList содержит защищенный метод GetImages. Доступ к нему можно получить с помощью «защищенной ошибки»
type
TGetImageImageList = class (TImageList) // Please use a better name!
end;
Вы можете преобразовать список изображений в TGetImageImageList, чтобы получить GetImages.
begin
TGetImageList(ImageList).GetImages(index, bitmap, mask);
end;
Растровое изображение содержит растровое изображение, а маска представляет собой черно-белое растровое изображение, определяющее прозрачные участки.
Теперь вы можете изменить растровое изображение и сохранить его, используя:
function Add(Image, Mask: TBitmap): Integer;
Надеюсь, это даст вам достаточно указателей для дальнейшего изучения.