如何繪製 Halo 文字效果 |
答題得分者是:jow
|
h@visli
資深會員 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
我希望在Canvas上Draw光暈效果文字(Halo Text, 見附圖), 請問該如何繪製呢.
Halo 效果說明: 在文字筆畫的邊上套上一個像素寬度的白邊. 也即每一個文字像素點(黑色)的周圍有八個像素點, 如果不屬於文字像素點, 則要作爲光暈點而繪爲白色. (不知道描述明白沒有, 也許看樣圖更明白
------
------------------------ 博采眾家之長,奉獻綿薄之力 ------------------------ |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
[code delphi] procedure TForm1.FormCreate(Sender: TObject); begin Color := clNavy; end; procedure TForm1.FormPaint(Sender: TObject); const S = '泰安產物保險公司'; var I, TW, TH: Integer; R: TRect; begin Canvas.Font.Name := '標楷體'; Canvas.Font.Height := 36; Canvas.Font.Color := clWhite; Canvas.Font.Style := []; Canvas.Brush.Color := clWhite; Canvas.Brush.Style := bsClear; TW := Canvas.TextWidth(S); TH := Canvas.TextHeight(S); R := Rect(0, 0, TW, TH); OffsetRect(R, 10, 10); for I := 0 to 8 do begin case I of 0: OffsetRect(R, -1, -1); 1: OffsetRect(R, 1, 0); 2: OffsetRect(R, 1, 0); 3: OffsetRect(R, 0, 1); 4: OffsetRect(R, 0, 1); 5: OffsetRect(R, -1, 0); 6: OffsetRect(R, -1, 0); 7: OffsetRect(R, 0, -1); 8:begin Canvas.Font.Color := clRed; OffsetRect(R, 1, 0); end; end; DrawText(Canvas.Handle, S, Length(S), R, DT_CENTER or DT_SINGLELINE); end; end; [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
借用JOW前輩的程式改成BCB版
[code cpp] __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Color = clNavy; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormPaint(TObject *Sender) { const String S = "泰安產物保險公司"; int I, TW, TH; TRect R; Canvas->Font->Name = "標楷體"; Canvas->Font->Height = 36; Canvas->Font->Color = clWhite; Canvas->Brush->Color = clWhite; Canvas->Brush->Style = bsClear; TW = Canvas->TextWidth(S); TH = Canvas->TextHeight(S); R = Rect(0, 0, TW, TH); OffsetRect(R, 10, 10); for (I=0; I<=8; I ) { switch (I) { case 0: OffsetRect(R, -1, -1); break; case 1: OffsetRect(R, 1, 0); break; case 2: OffsetRect(R, 1, 0); break; case 3: OffsetRect(R, 0, 1); break; case 4: OffsetRect(R, 0, 1); break; case 5: OffsetRect(R, -1, 0); break; case 6: OffsetRect(R, -1, 0); break; case 7: OffsetRect(R, 0, -1); break; case 8: { Canvas->Font->Color = clRed; OffsetRect(R, 1, 0); } } DrawText(Canvas->Handle, S.c_str(), S.Length(), &R , DT_CENTER | DT_SINGLELINE); } } [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |