Задано изображение в .bmp формате, которое сохранено в фале.Отобразить на экране это изображение путем случайного вибору точок из исходного файла и перенести их на экран из задержкой каждого пикселя или группы пикселей. Предусмотреть предохранение повторных переносов.
А>Задано изображение в .bmp формате, которое сохранено в фале.Отобразить на экране это изображение путем случайного вибору точок из исходного файла и перенести их на экран из задержкой каждого пикселя или группы пикселей. Предусмотреть предохранение повторных переносов.
Грузишь из файла TBitmap
На экране создаешь картинку того-же размера.
Далее создаешь формулы пересчёта X:Y в номер точки и наоборот. Например картинка 200 на 150 точек — это можно считать одномерный массив из (200*150 = ) 30 000 точек.
Заводишь массив array [30 000] of boolean — флаги, что эту точку перенесли. (лучше конечно не массив, в битовую карту — меньше в 8 раз памяти занимает)
Общий принцип такой:
Sub Mod_Inc (delta)
{ i := (i + delta) mod 30 000;}
While ( Count < 30 000 )
{
Mod_Inc ( random (30 000 );
while ( СписокПеренесённых[i] = true ) // Ищём первую следующйю не перенесённую
{ Mod_Inc (1); }
Point_XY = i2xy ( i );
Bitmap_Экран[Point_XY] := Bitmap_Файл[Point_XY];
СписокПеренесённых[i] := true;
Inc Count;
Application.ProcessMessages; // пусть перерисует экран, если надо, пусть тормозит, не жалко.
Sleep(200); // пусть еще больше тормозит.
}