1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
PaintBox1: TPaintBox;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormDestroy(Sender: TObject);
private
{ Déclarations privées }
bmp,bmpmemoire : TBitmap;
col : TColor;
procedure fond(bitmap : TBitmap);
function TripletoColor(RGBTriple : pRGBTriple) : TColor;
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
const
tab : array[0..49] of TColor = ($F9FFFF,$FFFFFE,$FFFEFF,$FEFFFF,$FFFFFD,$FDFFFD,$FDFDFF,$FFFDFC,$FEFCFD,$FFFDFD,$FEFEFF,$FFFEFE,$FEFFFE,$FDFFFF,$FFFDFF,$FEFEFE,$FDFDFD,$FFFFFC,$FFFCFF,$FCFFFF,$FFFCFC,$FCFFFC,$FCFCFC,$FFFEFC,$FCFEFF,$FEFFFC,$FFFEFD,$FDFEFF,$FCFDFE,$FEFBFF,$FBFEFF,$FBFFFE,$FBFFFF,$FFFAFF,$FFFFFB,$FBFFFB,$FFFAFB,$FBFBFF,$FFFCFB,$FBFCFF,$FCFBFF,$FBFDFF,$FFFDFE,$FFFFFA,$FAFFFF,$FFF9FF,$FDFBFF,$FFFEFA,$FEFEFA,$FFFDFA);
max : integer = 49;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=true;
bmp:=TBitmap.Create;
bmpmemoire:=TBitmap.Create;
ClientWidth:=Image1.Picture.Width;
ClientHeight:=Image1.Picture.Height;
With bmpmemoire do
begin
Width:=self.Width;
Height:=self.Height;
PixelFormat:=pf24bit;
Canvas.Draw(0,0,Image1.Picture.Metafile);
end;
bmp.Assign(bmpmemoire);
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
Paintbox1.Canvas.Draw(0,0,bmp);
end;
procedure TForm1.fond(bitmap : TBitmap);
var y : integer;
p : pRGBTriple;
begin
bitmap.PixelFormat := pf24Bit;
p := bitmap.ScanLine[bitmap.Height - 1];
for y := 0 to bitmap.Width * bitmap.Height - 1 do
begin
if tripletocolor(p) = col then
begin
p^.rgbtBlue := 255;
p^.rgbtGreen := 0;
p^.rgbtRed := 0;
end;
inc(p);
end;
end;
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var i : integer;
begin
col:=getPixel(bmp.Canvas.Handle,x,y);
for i:=0 to max do
begin
if (col = tab[i]) then
begin
fond(bmp);
break;
end else if col <> clblue then bmp.Assign(bmpmemoire);
end;
Paintbox1.Invalidate;
end;
function TForm1.TripletoColor(RGBTriple : PRGBTriple) : TColor;
begin
result:=rgb(RGBTriple.rgbtRed,RGBTriple.rgbtGreen,RGBTriple.rgbtBlue);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bmp.Free;
bmpmemoire.Free;
end;
end. |
Partager