GDI 程式設計 二 使用畫筆

2021-06-15 20:44:46 字數 2783 閱讀 5478

畫筆常用於繪製圖形的輪廓.gdi+的畫筆除了具有常見的色彩和寬度屬性外,還具有對齊方式,線帽,變換方式等屬性。gdi+中通過pen類來定義畫筆物件。

(一)、構造與使用畫筆

pen(brush, width); //用顏色與線寬構造乙個畫筆

pen(color, width); //用畫刷與寬度構造乙個畫筆

例子:
pen pen(color(255, 0, 0, 0),1);//用第乙個建構函式.構造寬度為1的黑色畫刷

pen texturedpen(&tbrush, 30);//用第二個建構函式,用乙個紋理畫刷

graphics.drawellipse(&texturedpen, 100, 20, 200, 100);

(二)、設值寬度與對齊方式

建立畫筆時,可以把寬度當作引數傳給建構函式,我們也可以使用setwidth()方法來改變畫筆的線寬。乙個理想的線寬度為0, 我們繪製一條直線時,畫素位於直線的正中,下面的例子中我們用寬度為1的先用黑畫筆繪製一條直線,在用綠色的寬度為10的畫筆再繪製一次。

pen blackpen(color(255, 0, 0, 0), 1);

pen greenpen(color(255, 0, 255, 0), 10);

greenpen.setalignment(penalignmentcenter);

graphics.drawline(&greenpen, 10, 100, 100, 50);

graphics.drawline(&blackpen, 10, 100, 100, 50);

graphics.drawrectangle(&greenpen, 10, 100, 50, 50);

graphics.drawrectangle(&blackpen, 10, 100, 50, 50);

greenpen.setalignment(penalignmentinset);

(三)、設定筆帽

我們可以用多種方式來繪製線條的頭部與尾部形狀,gdi+支援圓形,方形,菱形,與箭頭等樣式的筆帽。

pen pen(color(255, 0, 0, 255), 8);

pen.setstartcap(linecaparrowanchor);

pen.setendcap(linecaproundanchor);

graphics.drawline(&pen, 20, 175, 300, 175);

效果如下:

(四)、設定兩條直線的連線形

gdi+為我們提供了當兩條直線連線時連線處形狀的設定,有四種方式:斜接(miter)、斜切(bevel),圓形(round),剪裁斜接(miter clipped)。

graphicspath path;

pen penjoin(color(255, 0, 0, 255), 8);

path.startfigure();

path.addline(point(50, 200), point(100, 200));

path.addline(point(100, 200), point(100, 250));

penjoin.setlinejoin(linejoinbevel);

graphics.drawpath(&penjoin, &path);

(五)、自定義線型

gdi+為我們提供了好多線型,如果滿足不了我們的需求,我們可以用成員函式setdashpattern可以使用乙個預定義的陣列來描述畫筆的虛實, 下面的例子用自定義風格繪製了一條直線,所用陣列為,如果你用畫筆寬度去乘陣列得,顯示的曲線在25與75間變換, 空白在10與20間變換。

real dashvalues[4] = ;

pen blackpen(color(255, 0, 0, 0), 5);

blackpen.setdashpattern(dashvalues, 4);

graphics.drawline(&blackpen, point(5, 5), point(405, 5));

有一點要明白,最後的那條虛線要比25單位少,這樣它才能在405處結束。

(六)、畫筆的旋轉變換

我們可以在程式中修改畫筆在水平與垂直方向上的寬度的,假設我們有乙個畫筆的寬度為5,那麼我們用它來繪製的矩形在四條邊上長度都是一樣的, 如果想讓在水平與數值方向上不一致,我們可以使用變換,有三種方式可以實現上面的要求:

pen pen(color(255,0,0,255));

pen.setwidth(5);

matrix matrix(1,0,0,2,0,0);

pen.mutiplytransform(&matrix,matrixorderprepend);//方法一

pen.settransform(&matrix);//方法二

pen.scaletransform(1,4);

graphics.drawrectange(&pen,50,50,200,200);

還可以對畫筆進行旋轉變換,旋轉是相對在水平寬度與垂直位置上不一致的畫筆而言的左圖為縮放變換,右圖為旋轉變換。

GDI 程式設計 二 使用畫筆

畫筆常用於繪製圖形的輪廓.gdi 的畫筆除了具有常見的色彩和寬度屬性外,還具有對齊方式,線帽,變換方式等屬性。gdi 中通過pen類來定義畫筆物件。一 構造與使用畫筆 pen brush,width 用顏色與線寬構造乙個畫筆 pen color,width 用畫刷與寬度構造乙個畫筆例子 pen pe...

使用GDI 程式設計

1.引言 gdi 是windows xp中的乙個子系統,它主要負責在顯示螢幕和列印裝置輸出有關資訊,它是一組通過c 類實現的應用程式程式設計介面。顧名思義,gdi 是以前版本gdi的繼承者,出於相容性考慮,windows xp仍然支援以前版本的gdi,但是在開發新應用程式的時候,開發人員為了滿足圖形...

MFC中GDI之CPen(畫筆)

由cgdiobject類派生,用於修飾線條的顏色 寬度和線型 實線 虛線 點劃線等 cpen int npenstyle,int nwidth,colorref crcolor 在建構函式中建立乙個畫筆 bool createpen int npenstyle,int nwidth,colorref...