颜色选取 - 权当给 supperment 的回复吧, 你的要求要用到"种子算法", 我暂时还没算明白.

本例效果图:

颜色选取 - 权当给 supperment 的回复吧, 你的要求要用到"种子算法", 我暂时还没算明白.

unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls;



type

  TForm1 = class(TForm)

    Button1: TButton;

    Image1: TImage;

    procedure FormCreate(Sender: TObject);

    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure Button1Click(Sender: TObject);

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



const

  TargetColor: TColor = clRed;

var

  SeedColor: TColor;

  x1,y1: Integer;

  pic: TPicture;



procedure TForm1.FormCreate(Sender: TObject);

begin

  Image1.AutoSize := True;

  Image1.Picture.LoadFromFile('c:\temp\test.bmp');

  x1 := Image1.Left;

  y1 := Image1.Top;

  pic := Image1.Picture;

  Button1.Caption := '恢复';

end;



procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

var

  w,h: Integer;

  ImgHdc: HDC;

begin

  ImgHdc := Image1.Canvas.Handle;

  SeedColor := GetPixel(ImgHdc, X,Y);



  for w := 0 to Image1.Width-1 do

  for h := 0 to Image1.Height-1 do

    if GetPixel(ImgHdc, w,h)=SeedColor then

      SetPixelV(Canvas.Handle, x1+w, y1+h, TargetColor);

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

  Image1.Picture := pic;

end;



end.


 
   

你可能感兴趣的:(算法)