Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Наложение полупрозрачной картинки


mein ©   (2014-12-08 22:39:00) 

Хочу наложить полупрозрачный битмап на image, но что то не получается, что делаю не так?
Bitmap2:=TBitmap.Create;
Bitmap2.Width:=250;
Bitmap2.Height:=250;
Bitmap2.LoadFromFile('gipsokarton/1.bmp');

bf.BlendOp:=AC_SRC_OVER;
bf.BlendFlags:=0;
bf.AlphaFormat:=AC_SRC_ALPHA;
bf.SourceConstantAlpha:=255;
Windows.AlphaBlend(image1.Canvas.Handle, 0, 0, image1.Width, image1.Height, Bitmap2.Canvas.Handle, 0, 0, Bitmap2.Width, Bitmap2.Height, bf);


mein   (2014-12-12 18:51:00) [1]

Да, причина была в альфа канале png. Поставил плагин на paint.net, написал - Bitmap2.LoadFromFile('gipsokarton/4.bmp'); и всё заработало.


Endy   (2014-12-12 11:03:00) [2]

Иначе или конвертируйте ваш "4.png" в "1.bmp" с альфаканалом, или грузите через TPNGObject.


MBo   (2014-12-09 09:07:00) [3]

Битмапы могут иметь разный формат.
Альфаканал может присутствовать только в битмапе формата pf32bit.

На всякий случай - пример смешивания двух битмапов. Прозрачность НЕ попиксельная, а одна для всей картинки.
var
 bm1, bm2: TBitmap;
 bf: TBlendFunction;
 Alpha: Byte;
begin
 bm1 := TBitmap.Create;
 bm1.Width := 200;
 bm1.Height := 200;
 bm1.PixelFormat := pf32bit;
 bm2 := TBitmap.Create;
 bm2.Assign(bm1);
 bm1.Canvas.Brush.Color := clRed;
 bm1.Canvas.FillRect(Rect(0, 0, 150, 150));
 bm2.Canvas.Brush.Color := clBlue;
 bm2.Canvas.FillRect(Rect(50, 50, 200, 200));

 Alpha := 128;
 bf.BlendOp := AC_SRC_OVER;
 bf.BlendFlags := 0;
 bf.SourceConstantAlpha := Alpha;
 bf.AlphaFormat := 0;// AC_SRC_ALPHA;
 WinApi.Windows.AlphaBlend(bm1.Canvas.Handle, 0, 0, bm1.Width, bm1.Height,
   bm2.canvas.handle, 0, 0, bm2.Width, bm2.Height, bf);
 Canvas.Draw(0, 0, bm1);


mein   (2014-12-09 08:42:00) [4]

> MBo ©   (09.12.14 08:28) [1]
Битмап обычный - Bitmap2: TBitmap;
Поставил Bitmap2.LoadFromFile('gipsokarton/4.png'); вообще стало писать что невалидный файл.


MBo   (2014-12-09 08:28:00) [5]

А у битмапа имеется альфаканал, чтобы можно было AC_SRC_ALPHA и попиксельно-разную прозрачность использовать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо