![]() |
|
|
#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)); Суть - копирует нужный кусочек изображения из одной картинки на другую. Тебе так же потребуется сделать так, что-бы размеры картинок совпадали (или вычислять изменения размеров/координат), но это уже детали. |
|
#17
|
||||
|
||||
|
На скорую руку от скуки на работе накидал слайдшоу с несколькими примитивными эффектами. link
Эффекты: 1. Никаких 2. Выезд слева 3. Выезд справа 4. Выезд сверху 5. Выезд снизу 6. Альфа 7. Горизонтальные жалюзи 8. Вертикальные жалюзи Последний раз редактировалось dr. F.I.N., 11.10.2012 в 17:04. |
| Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
cybervampire (11.10.2012)
| ||
|
#18
|
||||
|
||||
|
Ну, как обещал, сделал. Только твой проект немног переделать пришлось.
Чет с мозаикой только не разобрался, сделал аналог (в худшую сторону). С тем же успехом можешь использовать пример dr. F.I.N., у него менее требовательно к процессору (в случае небольших размеров изображения). |
| Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
cybervampire (11.10.2012)
| ||
|
#19
|
||||
|
||||
|
Исправил ссылку.
Добавлены эффекты: 9. Появление снаружи 10. Появление изнутри 11. Мозайка 12. Горизонтальное перемешивание 13. Вертикальное перемешивание Цитата:
1. Ищем все Жипеги 2. Грузим в память 3. Конвертим их в БМП 4. Уменьшаем до размера отображения Если увеличить размеры формы (вчастности пейнтбокса), то на производительности это не отразится (на столько чтоб стало заметно глазу). Только в случае Альфа-эффекта. Там пробег по всем точкам идет, хоть и через сканлайн. В остальном - ничего нагружающего проц нету. Так что работает шустро :-P Последний раз редактировалось dr. F.I.N., 11.10.2012 в 18:34. |
| Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
cybervampire (11.10.2012)
| ||
|
#20
|
|||
|
|||
|
Огромное спасибо всем кто откликнулся. буду смотреть, делать по своему, если что будет непонятно напишу еще)))
|
|
#21
|
||||
|
||||
|
Цитата:
Все рассчитано под ресайзэд форму. Работает тоже шустро, но проца (тоесть одно ядро) гонит на 80-100 процентов . Но только во время действия эффекта Если бы мне нужно было что-то подобное делать - сделал бы в OpenGL, там было бы еще быстрее чем у тебя ( ), а эффектов то... |
|
#23
|
||||
|
||||
|
Цитата:
А мои картинки то непомещаются в форму, центр в нижнем правом углу - еле видно. >offtop Интересные кнопки. Сейчас создам тему наверное, чтоб подсказали, где найти изображения (текстуры) для элементов интерфейса. Хочу сделать GUI в OpenGL, но воображения самому нарисовать не хватает/руки кривые. |
|
#24
|
||||
|
||||
|
А чему там "жрать" - BitBlt в основном.
Это обычный ToolBar с градиентной заливкой. Последний раз редактировалось angvelem, 11.10.2012 в 22:34. |
|
#25
|
|||
|
|||
|
Цитата:
F.I.N., можешь сырцы сюда выложить, думал прикрутить к своей проге такие же фичи, но все руки не доходили... ЗЫ. zalil у меня с работы закрыт ![]() |
|
#26
|
||||
|
||||
|
Цитата:
|
|
#27
|
|||
|
|||
|
Все, спасибо. Я из дома скачал. Буду посмотреть...
|