首页 > OOP语言 > Delphi > 正文

再学GDI+[100]: TGPImage(20) - 替换颜色
2012-08-22 18:49:54   来源:www.bianceng.cn   评论:0 点击:

暂时无描述信息

本例效果图:

\

代码文件: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.

相关热词搜索:

上一篇:再学GDI+[101]: TGPImage(21) - 获取所有编码器的详细信息
下一篇:再学GDI+[99]: TGPImage(19) - 把图像转存为其他格式

分享到: 收藏