Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.07.2007, 21:27
zNk zNk вне форума
Прохожий
 
Регистрация: 16.01.2007
Сообщения: 39
Репутация: 10
Вопрос Плавный переход

Как сделать плавные переход между двумя картинками???
Ответить с цитированием
  #2  
Старый 19.07.2007, 21:55
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

http://delphiworld.narod.ru/base/tim...ransition.html
Ответить с цитированием
  #3  
Старый 19.07.2007, 21:57
zNk zNk вне форума
Прохожий
 
Регистрация: 16.01.2007
Сообщения: 39
Репутация: 10
По умолчанию

А если использовать jpg, попашет??? 0_o
Ответить с цитированием
  #4  
Старый 19.07.2007, 21:57
Аватар для <<D>>
<<D>> <<D>> вне форума
Активный
 
Регистрация: 06.05.2007
Адрес: ГДЕ ТО В СОЛНЕЧНОЙ СИСТЕМЕ
Сообщения: 207
Репутация: 15
Радость

procedure DrawAlpha(bmpBack, bmpFore : TBitmap; TransColor : TColor; OffX, OffY : Integer; Alpha : Integer);

type
TRGBArray = array[0..32767] of TRGBTriple;
PRGBArray = ^TRGBArray;

var
X, Y : Integer;
rowFore,
rowBack : PRGBArray;

begin
// check bitmaps
if not Assigned(bmpBack) or
not Assigned(bmpFore) then
Exit;

// check color depth
if (bmpFore.PixelFormat <> pf24bit) or
(bmpBack.PixelFormat <> pf24bit) then
Exit;

// check dimensions
if (bmpFore.Height + OffY > bmpBack.Height) or
(bmpFore.Width + OffX > bmpBack.Width) then
Exit;

// check alpha value
if (Alpha > 10) or
(Alpha < 1) then
Alpha := 10;

for y := 0 to bmpFore.Height - 1 do
begin
// scan bitmap rows
rowBack := bmpBack.ScanLine[y + OffY];
rowFore := bmpFore.ScanLine[y];
for x := 0 to bmpFore.Width - 1 do
// if not transparent color
if not ((rowFore[x].rgbtRed = GetRValue(TransColor)) and
(rowFore[x].rgbtGreen = GetGValue(TransColor)) and
(rowFore[x].rgbtBlue = GetBValue(TransColor))) then
// calculate new pixel value
begin
rowBack[x + OffX].rgbtRed := ((rowBack[x + OffX].rgbtRed * (10 - Alpha)) + (rowFore[x].rgbtRed * Alpha)) div 10;
rowBack[x + OffX].rgbtGreen := ((rowBack[x + OffX].rgbtGreen) * (10 - Alpha) + (rowFore[x].rgbtGreen * Alpha)) div 10;
rowBack[x + OffX].rgbtBlue := ((rowBack[x + OffX].rgbtBlue) * (10 - Alpha) + (rowFore[x].rgbtBlue * Alpha)) div 10;
end;
end;
end;





В таймере (interval=50) :

image1.Picture.Bitmap.PixelFormat := pf24bit;
image2.Picture.Bitmap.PixelFormat := pf24bit;
DrawAlpha(image1.Picture.Bitmap, image2.Picture.Bitmap, clFuchsia, 0, 0, 2);
image1.Invalidate;
__________________
Кому я должен - всем прощаю!!!!
Ответить с цитированием
  #5  
Старый 19.07.2007, 22:01
zNk zNk вне форума
Прохожий
 
Регистрация: 16.01.2007
Сообщения: 39
Репутация: 10
По умолчанию

Спасиб, попробую... репу те как будут результаты, скажу...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter