Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
13 / 12 / 3
Регистрация: 19.09.2009
Сообщений: 179
1

Плавная смена изображений с поддержкой альфа канала

27.06.2010, 10:28. Показов 2472. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ну в общем вопрос в теме...подскажите пожалуйста как реализовать плавную смену изображений с поддержкой альфа канала... (Image1 в Image2)

Вот без поддержки может кто знает как переделать...

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
procedure 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;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2010, 10:28
Ответы с готовыми решениями:

Плавная смена изображений
Тема уже давно заезжена, но у меня немного другая проблема, ответ на которую я не нашла. На...

Анимация Image.Source: плавная смена изображений
Всем привет! Подскажите пожалуйста, есть ли анимация, которая будет плавно менять один...

Плавная смена изображений ala Win7 (alpha канал)
Прошу помощи, уже не знаю у кого спросить - никто не знает. Хочу написать игру жанра Visual Novel...

Совместить изображения с соблюдением Альфа канала
Как совместить изображения соблюдая альфа канал???

3
480 / 253 / 51
Регистрация: 30.06.2010
Сообщений: 651
30.06.2010, 09:43 2
Код работает твой ... не пойму, что ты ошибочное увидел, я вижу только то, что первый битмап не теряет прозрачности (но может и не должен , код не разбирал ) а второй исправно потихоньку заливает первый битмап

вот проект (там ещё решение одного из вопросов форума, но там для тебя кнопка bmorph ) код я для внедрения слегка изменил (там стоят свитчи вида {//} и //} в моих правках)

может всё дело в канвасе, я его добавил для рисовки на Тимейдж, хотя кто знает...

проект для дельфи7 http://www.phomm.narod.ru/var.zip

если я неправильно понял, поясни, пожалуйста, что ты имел ввиду
1
13 / 12 / 3
Регистрация: 19.09.2009
Сообщений: 179
30.06.2010, 11:17  [ТС] 3
pHOMM, в общем у меня есть компонент, и мне нужно чтобы он поддерживал прозрачность...а если юзать данный код то при работе с PNG её нет...и вся область которая должна быть прозрачной почему то становится чёрной...
0
480 / 253 / 51
Регистрация: 30.06.2010
Сообщений: 651
30.06.2010, 11:25 4
к сожалению, с пнг не работал, мб дело в реализации прозрачности в пнг... пока пас
0
30.06.2010, 11:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2010, 11:25
Помогаю со студенческими работами здесь

Редактирование альфа канала (для png)
Доброго времени суток. :wall:Возник вопрос: как можно редактировать альфа канал(слой)(например в...

полупрозрачный куб (альфа канала в вершинах)
Здравствуйте! Хотел создать куб на плоскости, при этом чтобы куб был полупрозрачным. Куб с...

*.png файл загружается без альфа-канала
Всем привет! У меня проблема, при загрузке *.png файла с альфа каналом он не распознаётся. Для...

Баг с цветом при настройке альфа-канала
Здравствуйте. Столкнулся с такой проблемой. Написал простой шейдер для света и задал такие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru