Ну смотри.
AnimImage - это тоже самое что обычное изображение только с большим количеством Pixmap`ов.
Смотрим в справку:
Function LockImage:TPixmap( image:TImage,frame=0,read_lock=True,write_lock=True )
Description: Lock an image for direct access
Returns: A pixmap representing the image contents
Information: Locking an image allows you to directly access an image's pixels.
Only images created with the DYNAMICIMAGE flag can be locked.
Locked images must eventually be unlocked with UnlockImage before they can be drawn.
|
Второй параметр ф-ции LockImage отвечает за фрейм (кадр)
Значит нам нужно циклически проделать данную операцию с каждым кадром изображения.
For Local frm%=0 To CountFrames - 1
Local Pixmap:TPixmap = LockImage(Image, frm)
For Local Y% = 0 Until Pixmap.Height
For Local X% = 0 Until Pixmap.width
Local ARGB% = ReadPixel(Pixmap, X%, Y%)
Local R% = (ARGB & $00FF0000) Shr 16 ' красный
Local G% = (ARGB & $0000FF00) Shr 8 ' зеленый
Local B% = (ARGB & $000000FF) ' синий компонент
Local i# = 0.2126 * R + 0.7152 * G + 0.0722 * B
R = i
G = i
B = i
WritePixel Pixmap, X, Y, $FF000000 + R Shl 16 + G Shl 8 + B
Next
Next
Next
CountFrames - количество кадров изображения.
Вроде был универсальный способ узнать количество.
Чтото вроде: Image.Framse.Count или Image.Frames.Length
Поэксперементируй.
А лучше возьми
Blide.
Он всегда подскажет.