Лучше через менеджер ресурсов.
Принцип:
Загружаешь картинки не через стандартную LoadImage, а через менеджер ресурсов. При первой загрузке сохраняешь картинку, а потом считываешь ее уже из памяти, а не с диска, увеличивая утечки.
Вот пример моего менеждера:
Code
Type TResources
Global _images:TScriptVars = New TScriptVars
Global _fonts:TScriptVars = New TScriptVars
Global _loopSounds:TScriptVars = New TScriptVars
Global _sounds:TScriptVars = New TScriptVars
Global _pixmaps:TScriptVars = New TScriptVars
rem
bbdoc: Loads image
about:
С размерами картинок, не играемся - трудно учитывать. Вытягиваем их скейлом.
Хендл надо задавать при загрузке. После загрузки не трогаем хендл в основном коде, чтобы не было смещений у остальных картинок.
Не путать анимированные и полные картинки - не предусмотрено
На внутренних пиксмапах не рисовать - используются общие пиксмап для экономии памяти
endrem
Function LoadImage:TImage( url:String, midhandle%=True, hx#=0, hy#=0, flags%=MASKEDIMAGE|FILTEREDIMAGE )
?Debug
xAssert( FileSize(url) > 0, "File '"+url+"' is not exist!" )
?
Local img:TImage'
Local list:TList = _images.RetVars(url)
'find identical image
If list
For Local m:TImage = EachIn list
If imgCompareParams( m, midhandle, hx, hy, flags )
img = m
Exit
End If
Next
End If
'load from pixmap
If Not img
Local pm:TImage = TImage( _images.RetVar(url) )
If pm
img = .LoadImage( pm.pixmaps[0], flags )
End If
End If
'load from file
If Not img
img = .LoadImage( url, flags )
End If
'sets handles
?Debug
Assert img
?
If midhandle
MidHandleImage(img)
Else
img.handle_x = hx
img.handle_y = hy
End If
'add image to list
_images.AddVar( url, img )
If autoPoll Then PollSystem
Return img
End Function
...
End Type
Точка перед именем функции ".LoadImage" вызывает оригинальную функцию.
Код придется доработать, так как в нем есть другие либы. По принципу действия там понятно. Например _images - это просто карта (TMap).