Я же тебе написал, что надо использовать TPaintBox для вывода.
1. Заводишь буферный битмап (TBitmap). В него формируется картинка, которая будет выводится на экран.
2. В PaintBox.OnPaint просто делаешь копирование изображения из буфера.
3. Все эффекты реализуются как отрисовка в цикле соотв. шага преобразования на буферном битмапе с последующим обновлением PaintBox.
Как реализовать эф. мозаики, например.
Есть:
Код:
TMyForm = class(TForm)
Buf : TBitmap; // buffer
PaintBox : TPaintBox; // screen
Тогда эффект будет примерно так (очень схематично, просто для понимания):
Код:
procedure TMyForm.DoEffect(AFileName : String);
var
Pic : TPicture;
N, R, C, X, Y : Integer;
begin
Pic := TPicture.Create;
Pic.LoadFromFile(AFileName);
For I := 1 To 100 Do // 100 parts - matrix 10x10
Begin
// Here is just macro code to show how to do this
N := Random(100)+1; // Cell number in the matrix
C := N div 10; // Col number
R := N mod 10; // Row number
X := C * 50; // each cell is 50x50 pixels
Y := R * 50;
Bitmap.Canvas.CopyRect(Pic.Graphic,Rect(X,Y,X+50,Y+50));
PaintBox.Redraw;
End;
Pic.Free;
точно не помню как выглядит этот метод - Bitmap.Canvas.CopyRect(X,Y,Pic.Graphic,Rect(X,Y,X+ 50,Y+50));
Суть - копирует нужный кусочек изображения из одной картинки на другую.
Тебе так же потребуется сделать так, что-бы размеры картинок совпадали (или вычислять изменения размеров/координат), но это уже детали.