2013-08-24 55 views
1

我在窗體上有一個TImgView32(名爲CityMap),並在其上加載圖像。現在,我創建了一個層(TBitmapLayer)和借鑑使用Canvas.Ellipse一個TBitmap32變量像下面這樣的循環:在圖層中繪製一個透明的橢圓

procedure TfrmMain.Button1Click(Sender: TObject); 
var 
    tmpBmp: TBitmap32; 
    tmpBL: TBitmapLayer; 
begin 
    tmpBL:= TBitmapLayer.Create(CityMap.Layers); 

    tmpBmp:= TBitmap32.Create; 

    with tmpBmp do 
    begin 
    //Clear; 
    SetSize(50, 50); 
    Canvas.Brush.Color := clYellow; 
    Canvas.Brush.Style:= bsSolid; 
    Canvas.Pen.Color := clBlue; 
    Canvas.Pen.Width := 2; 
    Canvas.Ellipse(Rect(0, 0, 50, 50)); 
    end; 

    with tmpBL do 
    begin 
    Scaled:=true; 
    Bitmap.DrawMode:=dmBlend; 
    tmpBL.Bitmap:=(tmpBmp); 
    //tmpBmp.DrawTo(tmpBL.Bitmap, 0, 0); This line doesn't work! So using above line instead 
    end; 

    //... 

end; 

的結果是這樣的:

Current result

正如你看到的問題是那令人討厭的黑色矩形。如何創建這樣一個結果:

desired result

回答

5

使用dmTransparent繪製模式爲您TBitmap32圖像的DrawMode屬性:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Bitmap: TBitmap32; 
    Layer: TBitmapLayer; 
begin 
    Layer := TBitmapLayer.Create(CityMap.Layers); 

    Bitmap := TBitmap32.Create; 
    Bitmap.DrawMode := dmTransparent; 
    Bitmap.SetSize(50, 50); 
    Bitmap.Canvas.Brush.Color := clYellow; 
    Bitmap.Canvas.Brush.Style:= bsSolid; 
    Bitmap.Canvas.Pen.Color := clBlue; 
    Bitmap.Canvas.Pen.Width := 2; 
    Bitmap.Canvas.Ellipse(Rect(0, 0, 50, 50)); 

    Layer.Scaled := True; 
    Layer.Bitmap := Bitmap; 
    ... 
end; 
+0

無論如何,如果你正在尋找一種抗鋸齒向量繪圖引擎,我會建議你反穀物幾何圖書館(AGG)。我曾嘗試過當我決定在我們的地圖控件中使用什麼時,GR32_Lines的擴展是我正在處理的,但結果並不如AGG。而且,出於好奇,AGG被用作Mapnik的主要渲染器,其被使用,例如,用於渲染OpenStreetMaps圖塊。 – TLama

+0

感謝您的信息。和你一樣,我嘗試了GR32_Lines來產生反鋸齒結果。但縮放地圖時效果不佳。無論如何,GR32具有很好的功能(例如圖層和轉換)。我可以使用AGG與GR32(IDK有關AGG的任何內容)嗎? – SAMPro

+0

我個人使用['AggPasMod'](http://sourceforge.net/projects/aggpasmod/)包裝器,它附帶一個[''GR32 demo'](http://sourceforge.net/p/aggpasmod /代碼/ 39 /樹/中繼/實施例/ VCL/Agg2D%20%28GR32%29 /)。我沒有嘗試過這個演示,但可以肯定的是,我可以告訴你,你可以像AGG一樣使用TGraphic對象('TAgg2DGraphics'),所以你可以渲染矢量結果,例如與'TCanvas.Draw'方法。 – TLama