Модератор: Модераторы
Лекс Айрин писал(а):tBitmap
// Прозрачность + прозрачный цвет
{Src1,Src2,Dst - понятно
CT -прозрачный цвет
Amount - 0.001-1.0 - реальное смешение }
procedure Blend2(Const Src1,Src2,Dst: TBitmap; CT: Integer;Amount: extended);
var w,h,x,y:integer;
ps1,ps2,pd:pbytearray;
begin
w:=Src1.Width;
h:=Src1.Height;
//Dst.Width:=w;
//Dst.Height:=h;
//Src1.PixelFormat:=pf24bit;
//Src2.PixelFormat:=pf24bit;
//Dst.PixelFormat:=pf24bit;
for y:=0 to h-1 do begin
ps1:=Src1.ScanLine[y];
ps2:=Src2.ScanLine[y];
Dst.BeginUpdate; ;
pd:=Dst.ScanLine[y];
for x:=0 to w-1 do
If RGB(ps2[x*3+2],ps2[x*3+1],ps2[x*3])<>CT then
begin
If Amount<>1 then begin
pd[x*3] :=round((1-Amount)*ps1[x*3]+Amount*ps2[x*3]);
pd[x*3+1]:=round((1-Amount)*ps1[x*3+1]+Amount*ps2[x*3+1]);
pd[x*3+2]:=round((1-Amount)*ps1[x*3+2]+Amount*ps2[x*3+2]);
end else Move(ps2[x*3], pd[x*3],3);
end else Move(ps1[x*3], pd[x*3],3);
Dst.EndUpdate;
end;
end;
RedCat писал(а):Alex2013 спасибо, но кажется что Лазарь рисует текст с антиалиасингом, т.е. по цвету прозрачность не удается сделать
procedure TForm1.FormCreate(Sender: TObject);
Var B,B1:TBitmap;
begin
B:=TBitmap.Create; b.PixelFormat:=pf24bit;
B1:=TBitmap.Create;b1.PixelFormat:=pf24bit;
B1.SetSize(Image1.Width,Image1.Height);
b1.Canvas.Draw(0,0,Image1.Picture.Bitmap); //Draw Конвертирует цвета pf32bit -> pf24bit;
b.Canvas.Brush.Color:=clBlack; B.SetSize(Image1.Width,Image1.Height);
// при SetSize автоматом закрашивает черным.
B.Canvas.Font.Color:=ClWhite;
B.Canvas.TextOut(10,10,'Привет аборигенам...' );
Blend2(b1,b,B1,clBlack,1);
Image1.Picture.Bitmap.Assign(B1);
b.free; b1.free;
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14