I want to draw quite complex images with alpha-transparent rectangles and alpha-transparent images. There is GDI+ wrapper from Mitov, but it doesn't seem to support 32bit BMP files plus it rescales them and the documentation is terrible. BMPs are way faster than PNGs so I want to use them. There is SynGDI wrapper of GDI+, but it seems very basic and there is no documentation for it. There is also this trick for GDI:

procedure DrawAlphaAPI(Source: TBitmap; Destination: TCanvas;
  const X, Y: Integer; const Opacity: Byte = 255);
var  BlendFunc: TBlendFunction;
begin
  BlendFunc.BlendOp := AC_SRC_OVER;
  BlendFunc.BlendFlags := 0;
  BlendFunc.SourceConstantAlpha := Opacity;

  if Source.PixelFormat = pf32bit then
    BlendFunc.AlphaFormat := AC_SRC_ALPHA
  else
    BlendFunc.AlphaFormat := 0;

  Windows.AlphaBlend(Destination.Handle, X, Y, Source.Width, Source.Height,
  Source.Canvas.Handle, 0, 0, Source.Width, Source.Height, BlendFunc);
end;

But when I call it with Opacity = 255 it draws 32bit bitmaps not properly (something like they are half transparent where they should be fully). I don't want to use Scanline to make pixels transparent as this will be too complicated to draw all the transparent rectangles this way. Also I thin GDI+ should be faster on modern computers, am I right?

So the question is: how to draw an alpha transparent rectangle and bitmap easily (without tons of code)?

Preferred Delphi: 7. I also have 2005 and XE3 but since 7 is a speed demon I would most want something to work from 7 up.

Edit
Report