Здравствуйте, Гость
Вторник, 12.12.2017, 04:32
Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 1 из 11
Модератор форума: Admin 
Форум » Все о Delphi » Графика и игры » Плавная смена изображений
Плавная смена изображений
XakerДата: Четверг, 18.02.2010, 14:33 | Сообщение # 1
Ранг 4
Группа: Проверенные
Сообщений: 83
Награды: 1
Репутация: 0
Статус: Offline
В общем нашёл процедуру плавной смены изображений....но дело в том что она PNG (или bmp32) не поддерживает... помогите исправить пожалуйста...очень нужно) help

Code
procedure TEffectButton.Morphing(Bm1,Bm2: TBitmap);
var
   i: integer;
   x, y: integer;
   bm: TBitMap;
   p1, p2, p: PByteArray;
   c: integer;
   k: integer;
begin
   bm := TBitMap.Create;

if bm1.Height < bm2.Height then
   begin
     bm.Height := bm1.Height;
     bm2.Height := bm1.Height;
   end
   else
   begin
     bm.Height := bm2.Height;
     bm1.Height := bm2.Height;
   end;
   if bm1.Width < bm2.Width then
   begin
     bm.Width := bm1.Width;
     bm2.Width := bm1.Width;
   end
   else
   begin
     bm.Width := bm2.Width;
     bm1.Width := bm2.Width;
   end;

   bm.PixelFormat := pf24bit;
   bm1.PixelFormat := pf24bit;
   bm2.PixelFormat := pf24bit;

   Canvas.Draw(0,0,Bm1);
   SetBkMode(Canvas.Handle,TRANSPARENT);
   Canvas.TextOut((Width div 2) - (Canvas.TextWidth(FText) div 2),(Height div 2) - (Canvas.TextHeight(FText) div 2),FText);
   SetBkMode(Canvas.Handle,OPAQUE);
   for i := 1 to FInterval - 1 do
   begin
     for y := 0 to bm.Height - 1 do
     begin
       p := bm.ScanLine[y];
       p1 := bm1.ScanLine[y];
       p2 := bm2.ScanLine[y];
       for x := 0 to bm.Width * 3 - 1 do
         p^[x] := round((p1^[x] * (FInterval - i) + p2^[x] * i) / FInterval);
     end;
     Canvas.Draw(0,0,Bm);
     SetBkMode(Canvas.Handle,TRANSPARENT);

    Canvas.TextOut((Width div 2) - (Canvas.TextWidth(FText) div 2),(Height div 2) - (Canvas.TextHeight(FText) div 2),FText);
    SetBkMode(Canvas.Handle,OPAQUE);
    Application.ProcessMessages;
    if Application.Terminated then
      break;
   end;
   Canvas.Draw(0,0,Bm2);
   SetBkMode(Canvas.Handle,TRANSPARENT);
   Canvas.TextOut((Width div 2) - (Canvas.TextWidth(FText) div 2),(Height div 2) - (Canvas.TextHeight(FText) div 2),FText);
   SetBkMode(Canvas.Handle,OPAQUE);
   bm.Destroy;
end;
 
AdminДата: Четверг, 18.02.2010, 16:09 | Сообщение # 2
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
Попробуй это http://delphidevelop.ru/load/19-1-0-67

Не оказываю помощь через личные сообщения и ICQ
 
XakerДата: Четверг, 18.02.2010, 18:50 | Сообщение # 3
Ранг 4
Группа: Проверенные
Сообщений: 83
Награды: 1
Репутация: 0
Статус: Offline
Admin, а как из него код нужного эфекта выдернуть...? например Fade там как то мудрено...и компонента не хватает..
 
AdminДата: Пятница, 19.02.2010, 09:52 | Сообщение # 4
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
Ну если есть исходник компонента посмотри в нем, как это делается.
Ну или воспользуйся этим компонентом да и все.


Не оказываю помощь через личные сообщения и ICQ
 
Форум » Все о Delphi » Графика и игры » Плавная смена изображений
Страница 1 из 11
Поиск:

Copyright DelphiDevelop.ru © 2008-2017
Хостинг от uCoz