|
#16
|
|||
|
|||
Я же тебе написал, что надо использовать 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)); Суть - копирует нужный кусочек изображения из одной картинки на другую. Тебе так же потребуется сделать так, что-бы размеры картинок совпадали (или вычислять изменения размеров/координат), но это уже детали. |