TGPColor 是 GdiPlus 的顏色主體, 它雖然是個結構體, 但和類一樣, 方法、屬性一應俱全.
之所以沒有把它定義為類或接口, 我覺得主要是它需要和一個整數值進行隱式轉換, 這要用到運算符重載(暫時只有結構有).
TGPColor 的多種構建方法:
var
c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11: TGPColor;
begin
c1 := TGPColor.Create(0 , 0 , 255 ); { 不透明藍色 }
c2 := TGPColor.Create(255, 0, 0, 255); { 不透明藍色 }
c3 := TGPColor.Create(128, 0, 0, 255); { 半透明藍色 }
c4 := TGPColor.Create($800000FF); { 半透明藍色 }
c5 := TGPColor.MakeARGB(128, 0, 0, 255); { 半透明藍色 }
c6 := TGPColor.CreateFromColorRef(clBlue); { 半透明藍色, 參數是 Delphi 傳統格式的顏色值 }
c7.Initialize(0, 0, 255); { 不透明藍色 }
c8.Initialize(128, 0, 0, 255); { 半透明藍色 }
c9.Initialize($800000FF); { 半透明藍色 }
c10.InitializeFromColorRef(clBlue); { 不透明藍色, 參數是 Delphi 傳統格式的顏色值 }
c11 := TGPColor.Blue; { 不透明藍色, 這是 TGPColor 中 141 個顏色常量之一 }
end;
//因為 TGPColor 使用運算符重載: TGPColor 可與 ARGB(Cardinal) 隱式轉換, 所以:
var
Color: TGPColor;
begin
Color := $FF00FF00;
ShowMessageFmt('$%x', [Color.Value]); //$FF00FF00
end;
//反之亦然:
var
Num: ARGB;
begin
Num := TGPColor.Lime;
ShowMessageFmt('$%x', [Num]); //$FF00FF00
end;
TGPColor 的屬性:
var
C: TGPColor;
begin
C := TGPColor.Create($11, $22, $33, $44);
{ TGPColor.Value 是顏色值 }
ShowMessageFmt('$%x', [C.Value]); //$11223344
{ TGPColor.ColorRef 是 Delphi 傳統格式的顏色值 }
ShowMessageFmt('$%x', [C.ColorRef]); //$443322
{ Alpha、Red、Green、Blue 各分量 }
ShowMessageFmt('$%.2x, $%.2x, $%.2x, $%.2x', [C.A, C.R, C.G, C.B]); //$11, $22, $33, $44
{ TGPColor.Alpha 與 TGPColor.A 是一回事 }
ShowMessageFmt('$%.2x, $%.2x', [C.Alpha, C.A]); //$11, $11
end;
透明色演示代碼:
uses GdiPlus, GdiPlusHelpers;
procedure TForm1.FormPaint(Sender: TObject);
var
Image: IGPImage;
Brush: IGPSolidBrush;
Rect: TGPRect;
begin
ChDir('C:\GdiPlusImg\');
Image := TGPImage.Create('Grapes.jpg');
Canvas.ToGPGraphics.DrawImage(Image, 20, 10);
Rect.Initialize(0, 20, Image.Width + 40, 35);
Brush := TGPSolidBrush.Create(TGPColor.Create(255, 0, 128, 255));
Canvas.ToGPGraphics.FillRectangle(Brush, Rect);
Rect.Y := Rect.Y + Rect.Height + 20;
Brush := TGPSolidBrush.Create(TGPColor.Create(127, 0, 128, 255));
Canvas.ToGPGraphics.FillRectangle(Brush, Rect);
Rect.Y := Rect.Y + Rect.Height + 20;
Brush := TGPSolidBrush.Create(TGPColor.Create(63, 0, 128, 255));
Canvas.ToGPGraphics.FillRectangle(Brush, Rect);
end;
效果圖: