![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Наложение полупрозрачной картинки
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 и попиксельно-разную прозрачность использовать?