Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AlphaBlend+AC_SRC_ALPHA 
:(
    Опции темы
HackMan
Дата 28.2.2007, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: нет
Всего: 9



Код

  var
    Blend : BLENDFUNCTION;
    Bm1, Bm2 : TBitmap;
    
begin
  Bm1 := Bitmap1.Create;
  Bm2 := Bitmap1.Create;
  Bm1.LoadFromFile('Bitmap1.bmp');
  Bm1.PixelFormat := pf32bit;
  Bm2.LoadFromFile('Bitmap2.bmp');
  Bm2.PixelFormat := pf32bit;

  Blend.BlendOp := 0;
  Blend.BlendFlags := 0;
  Blend.SourceConstantAlpha := 100;
  Blend.AlphaFormat := AC_SRC_ALPHA;
  AlphaBlend(Bm1.Canvas.Handle, 0, 0, Bm1.Width, Bm1.Height, Bm1.Canvas.Handle, 0, 0, Bm2.Width, Bm2.Height, Blend);
end;


Функция AlphaBlend не срабатывает и выдаёт результат FALSE.

Код

BOOL AlphaBlend(
  HDC hdcDest,                 // handle to destination DC
  int nXOriginDest,            // x-coord of upper-left corner
  int nYOriginDest,            // y-coord of upper-left corner
  int nWidthDest,              // destination width
  int nHeightDest,             // destination height
  HDC hdcSrc,                  // handle to source DC
  int nXOriginSrc,             // x-coord of upper-left corner
  int nYOriginSrc,             // y-coord of upper-left corner
  int nWidthSrc,               // source width
  int nHeightSrc,              // source height
  BLENDFUNCTION blendFunction  // alpha-blending function
);


Цитата

AC_SRC_ALPHA  This flag is set when the bitmap has an Alpha channel (that is, per-pixel alpha). Note that the APIs use premultiplied alpha, which means that the red, green and blue channel values in the bitmap must be premultiplied with the alpha channel value. For example, if the alpha channel value is x, the red, green and blue channels must be multiplied by x and divided by 0xff prior to the call.


Вроде делаю всё как надо. В чём проблема?

P.S.
С использованием AC_SRC_OVER всё работает, но теряется поддержка Bitmap с альфаканалом.. smile


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
Snowy
Дата 28.2.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 18
Всего: 484



Если у тебя битмапа с альфаканалом, то убери насильный перевод в 32 бита.
Этот перевод нужен только, если формат не 32 бита.
Если он и так 32 бита, то переводить вредно smile
К сожалению у меня нет битмапов с альфа-каналом и как их сделать - не знаю, поэтому подсказать не могу.
PM MAIL   Вверх
Alexeis
Дата 28.2.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



1е
Цитата

  Bm1 := Bitmap1.Create;
  Bm2 := Bitmap1.Create;

что такое Bitmap1, совсем не ясно.
Код

  Bm1 := TBitmap.Create;
  Bm2 := TBitmap.Create;


2е
Цитата

  AlphaBlend(Bm1.Canvas.Handle, 0, 0, Bm1.Width, Bm1.Height, Bm1.Canvas.Handle, 0, 0, Bm2.Width, Bm2.Height, Blend);


Source = Dest. Думаю так нельяз.

Код

   windows.AlphaBlend(Bm1.Canvas.Handle, 0, 0, Bm1.Width, Bm1.Height,
                                     Bm2.Canvas.Handle, 0, 0, Bm2.Width, Bm2.Height, Blend);


Вот а после этого все работает нормально.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
HackMan
Дата 28.2.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: нет
Всего: 9



Код

  Bm1 := TBitmap.Create;
  Bm2 := TBitmap.Create;


Да-да, именно это и имел в виду smile
Просто код не копировал, а писал попамяти и описался smile

Код

  AlphaBlend(Bm1.Canvas.Handle, 0, 0, Bm1.Width, Bm1.Height, [color=red]Bm2[/color].Canvas.Handle, 0, 0, Bm2.Width, Bm2.Height, Blend);


Тоже описался.. smile

Всё равно ничего не работает  smile 

Это сообщение отредактировал(а) HackMan - 28.2.2007, 19:56


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
Alexeis
Дата 28.2.2007, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(HackMan @  28.2.2007,  19:55 Найти цитируемый пост)
Тоже описался.. 

  Так не получиться. Нужен реально тот код, который не работает, а не примерный код. Иначе как я пойму где ошибка? Одно скажу в принципе код верный. Думаю ошибки в деталях.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1000 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.