Тут нечего больше объяснять. X и Y - аналоги вашего "f" и "i'. X - позиция пиксела по горизонтали, Y - по вертикали. Проходя в цикле Y от 0 до высоты Bitmap'a (или 500 в вашем случае, главное, чтобы высота картинки была не меньше), сканируем строку битмапа (заносим в память последовательность байт, которые и составляют одну строку). Теперь, проходя во втором цикле X, уже работаем со строкой, по-горизонтали. Здесь Rows[X] - это позиция [X] пиксела в строке[Y]. rgbtRed, rgbtGreen, rgbtBlue - красная, зеленая и синяя составляющие цвета. Их можно получить системными ф-циями
GetRValue(цвет) - красная составляющая,
GetGValue - зеленая.
GetBValue - синяя.
RGB(красная составляющая, зел. сост, син. сост) - получаем цвет TColor из его составляющих.
Bitmap - в вашем случае Form1.image1.Picture.Bitmap.
Чтобы этот код работал, желательно при создании формы (в OnCreate формы) прописать
Код:
Form1.image1.Picture.Bitmap.PixelFormat:=pf24bits;
Вот примерчик