TBitmap рисует прозрачное изображение в Delphi 2009 - PullRequest
3 голосов
/ 13 ноября 2009

Проблема при рисовании полупрозрачного изображения PNG на объекте TBitmap.

Если для параметра TBitmap, HandleType установлено значение bmDDB, то холст рисуется прозрачным. Но проблема в том, что он не работает на всех типах компьютеров (например, Windows на компьютерах Apple).

Когда свойство HandleType TBitmap установлено в bmDIB, фон холста рисуется белым.

bmp.HandleType := bmDIB;

Я попытался установить стиль кисти на bsClear. Но он рисует прозрачные пиксели в черном цвете.

Как нарисовать изображение, сохранив его прозрачность и плавные изогнутые края.

Спасибо Паван.

1 Ответ

4 голосов
/ 13 ноября 2009

Конечно, можно рисовать bmDIB растровое изображение с прозрачным фоном на холсте:

procedure TForm1.FormPaint(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.PixelFormat := pf32bit;
    Bmp.HandleType := bmDIB;
    Bmp.Width := 700;
    Bmp.Height := 400;
    Bmp.Transparent := TRUE;
    Bmp.TransparentColor := clMaroon;

    with Bmp.Canvas do begin
      Brush.Color := clMaroon;
      FillRect(Rect(0, 0, Bmp.Width, Bmp.Height));

      Brush.Color := clBlue;
      FillRect(Rect(42, 42, 200, 300));
    end;

    Canvas.Draw(12, 12, Bmp);
  finally
    Bmp.Free;
  end;
end;

Обратите внимание, что сначала все растровое изображение заполняется цветом, установленным как TransparentColor.

Но для большего контроля и скорости вы должны искать решение, которое не зависит от GDI (которое включает в себя возможности графической карты и драйвера), что-то вроде Graphics32 .

...