Claro, estas trabajando con Canvas.Pixels[X, Y] para acceder a cada pixel, eso es muy lento cuando trabajas con toda la imagen.
cHackAll en su
ejemplo te muestra como acceder a un puntero que apunta a los pixels de una línea
Código Delphi
[-]lpByte := Pointer(Cardinal(FBitmap.ScanLine[Top + y]) + (Left * 3));
Así sólo tabajas en memoria y ganas tiempo.
En
este hilo, encontrarás cómo llegar a la imagen en memoria de un bitmap, concretamente
aquí.
Saludos.