Показать сообщение отдельно
  #9  
Старый 06.12.2012, 10:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,107
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от angvelem
Я через GetDIBits (точнее его предшественника) отрисовываю тень, кусок кода естественно на ассемблере.

ОК, проблему решил через AlphaBlend. Надо теперь только немного оптимизировть...

Вот эта функция, мож кому пригодится. Нарыл на ExpertsExchange.
Код:
procedure TCutImageFrame.BlendRectangle(Canvas:TCanvas;R:TRect;C:TColor;MixPercent:Byte);
Var
 tmpBMP:TBitmap;
 Blend:_BLENDFUNCTION;
begin
 tmpBMP:=TBitmap.Create;
 try
  tmpBMP.Width:=1;
  tmpBMP.Height:=1;
  tmpBMP.Canvas.Pixels[0,0]:=C;
  Blend.BlendOp:=AC_SRC_OVER;
  Blend.BlendFlags:=0;
  Blend.SourceConstantAlpha:=(50+255*MixPercent) Div 100;
  Blend.AlphaFormat:=0;
  AlphaBlend(Canvas.Handle,R.Left,R.Top,R.Right-R.Left,R.Bottom-R.Top,tmpBMP.Canvas.Handle,0,0,1,1,Blend);
 finally
  tmpBMP.Free;
 end;
end;
Ответить с цитированием