2009-11-13 6 views
3

TBitmap 개체에서 반투명 PNG 이미지를 그리는 데 문제가 있습니다.TBitmap Delphi 2009에서 투명한 이미지 그리기

TBitmap의 HandleType이 bmDDB로 설정된 경우 캔버스가 투명하게 그려집니다. 그러나 문제는 모든 종류의 컴퓨터에서 작동하지 않는다는 것입니다 (예 : 사과 컴퓨터의 Windows).

TBitmap의 HandleType 속성을 bmDIB로 설정하면 캔바스 배경이 흰색으로 그려집니다.

bmp.HandleType := bmDIB; 

브러시 스타일을 bsClear로 설정해 보았습니다. 그러나 투명 픽셀을 검은 색으로 그립니다.

어떻게 투명도와 부드러운 곡선 가장자리를 유지하면서 이미지를 그릴 수 있습니까?

감사합니다. Pavan.

답변

4

은 캔버스에 투명한 배경으로 bmDIB 맵 페인트 확실히 가능하다 : 전체 비트 맵 TransparentColor로 설정된 색상 첫 충전

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; 

참고있다.

그러나 제어 및 속도를 높이려면 그래픽 카드 및 드라이버 기능과 관련된 GDI (예 : Graphics32)에 의존하지 않는 솔루션을 조사해야합니다.

+2

+1 Graphics32 – Runner

+0

코너 가장자리에 반투명 픽셀이있는 png 이미지를로드하려고합니다. 위의 절차를 사용하여 반투명 픽셀을 검정색으로 그립니다. – Pavan

+1

@Pavan : 투명 <> 반투명. 픽셀 당 알파 값이 필요한 경우이를 완벽하게 지원하는 그래픽 형식으로 유지하거나 Graphics32를 조사해야합니다. 또는 GDI +로. AFAIK는 GDI를 통해 원하는 것을 할 수 있으며 모든 시스템에서 작동하는지 보장 할 수 없습니다. – mghie

관련 문제