本例效果圖:
代碼文件:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TeCanvas;
type
TForm1 = class(TForm)
ButtonColor1: TButtonColor;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure ButtonColor1Click(Sender: TObject);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses GDIPOBJ, GDIPAPI;
var
img: TGPImage;
ImageAttributes: TGPImageAttributes;
ColorMap: array[0..0] of TColorMap; {每個元素包含新舊兩種顏色}
procedure TForm1.FormCreate(Sender: TObject);
begin
img := TGPImage.Create('c:\temp\test.png');
ClientWidth := img.GetWidth;
ClientHeight := img.GetHeight;
ImageAttributes := TGPImageAttributes.Create;
ColorMap[0].oldColor := aclBlack;
ColorMap[0].newColor := aclBlack;
ButtonColor1.Caption := '替換';
Button1.Caption := '復原';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
img.Free;
ImageAttributes.Free;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
color: TColor;
begin
color := GetPixel(Canvas.Handle, X, Y);
ColorMap[0].oldColor := ColorRefToARGB(color);
ButtonColor1.SymbolColor := color;
ButtonColor1.Refresh;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
g: TGPGraphics;
begin
g := TGPGraphics.Create(Canvas.Handle);
g.DrawImage(img,
MakeRect(0, 0, img.GetWidth, img.GetHeight),
0, 0,
img.GetWidth, img.GetHeight,
UnitPixel,
ImageAttributes
);
g.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ButtonColor1.SymbolColor := ARGBToColorRef(ColorMap[0].OldColor);
ButtonColor1.Enabled := True;
ButtonColor1.Update;
ImageAttributes.ClearRemapTable; {ClearRemapTable}
Repaint;
end;
procedure TForm1.ButtonColor1Click(Sender: TObject);
begin
ColorMap[0].newColor := ColorRefToARGB(ButtonColor1.SymbolColor);
ImageAttributes.SetRemapTable(Length(ColorMap), @ColorMap); {SetRemapTable}
Repaint;
ButtonColor1.Enabled := False;
end;
end.
窗體文件:object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 220
ClientWidth = 315
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poDesktopCenter
OnCreate = FormCreate
OnDestroy = FormDestroy
OnMouseUp = FormMouseUp
OnPaint = FormPaint
PixelsPerInch = 96
TextHeight = 13
object ButtonColor1: TButtonColor
Left = 231
Top = 8
Caption = 'ButtonColor1'
TabOrder = 0
OnClick = ButtonColor1Click
end
object Button1: TButton
Left = 231
Top = 39
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 1
OnClick = Button1Click
end
end