现在的位置: 首页 > 综合 > 正文

【delphi】替换bmp图片中的颜色

2012年12月05日 ⁄ 综合 ⁄ 共 4975字 ⁄ 字号 评论关闭

工作中,经常需要将bmp图片中的某个颜色修改为另外一种颜色。比如:将图片中的所有白色均修改成灰色。

平时都是拿画图板中的油漆桶工具一点一点的刷,费时又费力。(这么干好几年了 :( )

今天抽空编了一个小软件,实现了这种功能。

 

源码下载地址:网络U盘

 

 

代码

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, StdCtrls, ExtDlgs, Buttons;

type
TForm1
= class(TForm)
grp1: TGroupBox;
img1: TImage;
btn1: TButton;
dlgOpenPic1: TOpenPictureDialog;
btn2: TButton;
grp2: TGroupBox;
lbl1: TLabel;
btn3: TBitBtn;
btn4: TBitBtn;
pnl1: TPanel;
dlgColor1: TColorDialog;
grp3: TGroupBox;
lbl2: TLabel;
btn5: TBitBtn;
btn6: TBitBtn;
pnl2: TPanel;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure btn3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure btn3MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure btn4Click(Sender: TObject);
procedure btn5MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure btn6Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
imgbmp:TBitmap;
imgpath:
string;
bOpen:Boolean;
OriginalColor,Changedtoc:TColor;
implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
height:Integer;
width:Integer;
h,w:Integer;


begin
if bOpen then
begin
imgbmp :
= TBitmap.Create;
imgbmp.LoadFromFile(imgpath);
imgbmp.SaveToFile(imgpath
+ '_bak');
height :
= imgbmp.Height;
width :
= imgbmp.Width;
//ShowMessage(IntToStr(width)+'--'+ IntToStr(height));
for h:= 0 to height-1 do
begin
for w := 0 to width-1 do
begin
if imgbmp.Canvas.Pixels[w,h]=OriginalColor then
imgbmp.Canvas.Pixels[w,h] :
= Changedtoc;
end;
end;
imgbmp.SaveToFile(imgpath);
img1.Picture.LoadFromFile(imgpath);
imgbmp.Free;

end
else
ShowMessage(
'图片未打开');

end;

procedure TForm1.btn2Click(Sender: TObject);
var
s1:
string;
begin
if dlgOpenPic1.Execute then
begin
imgpath :
= dlgOpenPic1.FileName;
img1.Picture.LoadFromFile(dlgOpenPic1.FileName);
bOpen :
= True;
btn1.Enabled :
= True;
end;
end;

procedure TForm1.btn3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pnl1.Color :
= Canvas.Pixels[x,y];
end;

procedure TForm1.btn3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Pt: TPoint;
begin
GetCursorPos(Pt);
if Pt.X < 900 then
begin
OriginalColor :
= GetPixel(GetDC(0), pt.X, pt.Y);
pnl1.Color :
= OriginalColor;//Form1.Canvas.Pixels[p.X,p.Y];
end;
end;

procedure TForm1.btn3MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pnl1.Color :
= Canvas.Pixels[x,y];
end;

procedure TForm1.btn4Click(Sender: TObject);
begin
if dlgColor1.Execute then
begin
OriginalColor :
= dlgColor1.Color;
pnl1.Color :
= OriginalColor;
end;
end;

procedure TForm1.btn5MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Pt: TPoint;
begin
GetCursorPos(Pt);
if Pt.X < 900 then
begin
Changedtoc :
= GetPixel(GetDC(0), pt.X, pt.Y);
pnl2.Color :
= Changedtoc;//Form1.Canvas.Pixels[p.X,p.Y];
end;

end;

procedure TForm1.btn6Click(Sender: TObject);
begin
if dlgColor1.Execute then
begin
Changedtoc :
= dlgColor1.Color;
pnl2.Color :
= Changedtoc;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
btn1.Enabled :
= false;
end;

end.

 

 

 

窗体文件:

窗体文件

object Form1: TForm1
Left
= 0
Top
= 0
Caption
= 'BMP'#22270#29255#39068#33394#26367#25442#22120
ClientHeight
= 627
ClientWidth
= 949
Color
= clBtnFace
Font.Charset
= DEFAULT_CHARSET
Font.Color
= clWindowText
Font.Height
= -11
Font.Name
= 'Tahoma'
Font.Style
= []
OldCreateOrder
= False
OnCreate
= FormCreate
PixelsPerInch
= 96
TextHeight
= 13
object grp1: TGroupBox
Left
= 8
Top
= 0
Width
= 833
Height
= 621
TabOrder
= 0
object img1: TImage
Left
= 14
Top
= 16
Width
= 800
Height
= 600
end
end
object btn1: TButton
Left
= 866
Top
= 407
Width
= 75
Height
= 25
Caption
= #36716#25442
TabOrder
= 1
OnClick
= btn1Click
end
object btn2: TButton
Left
= 866
Top
= 376
Width
= 75
Height
= 25
Caption
= #25171#24320#22270#29255
TabOrder
= 2
OnClick
= btn2Click
end
object grp2: TGroupBox
Left
= 847
Top
= 0
Width
= 98
Height
= 129
Caption
= #26367#25442#21069#39068#33394
TabOrder
= 3
object lbl1: TLabel
Left
= 10
Top
= 23
Width
= 64
Height
= 13
Caption
= #26367#25442#21069#39068#33394':'
end
object btn3: TBitBtn
Left
= 11
Top
= 46
Width
= 30
Height
= 25
Caption
= #21462#33394
DoubleBuffered
= True
ParentDoubleBuffered
= False
TabOrder
= 0
OnMouseMove
= btn3MouseMove
end
object btn4: TBitBtn
Left
= 58
Top
= 46
Width
= 30
Height
= 25
Caption
= #36873#33394
DoubleBuffered
= True
ParentDoubleBuffered
= False
TabOrder
= 1
OnClick
= btn4Click
end
object pnl1: TPanel
Left
= 11
Top
= 83
Width
= 77
Height
= 31
BevelKind
= bkFlat
BevelOuter
= bvNone
Caption
= 'Color'
TabOrder
= 2
end
end
object grp3: TGroupBox
Left
= 847
Top
= 152
Width
= 98
Height
= 129
Caption
= #26367#25442#21518#39068#33394
TabOrder
= 4
object lbl2: TLabel
Left
= 10
Top
= 23
Width
= 64
Height
= 13
Caption
= #26367#25442#21518#39068#33394':'
end
object btn5: TBitBtn
Left
= 11
Top
= 46
Width
= 30
Height
= 25
Caption
= #21462#33394
DoubleBuffered
= True
ParentDoubleBuffered
= False
TabOrder
= 0
OnMouseMove
= btn5MouseMove
end
object btn6: TBitBtn
Left
= 58
Top
= 46
Width
= 30
Height
= 25
Caption
= #36873#33394
DoubleBuffered
= True
ParentDoubleBuffered
= False
TabOrder
= 1
OnClick
= btn6Click
end
object pnl2: TPanel
Left
= 11
Top
= 83
Width
= 77
Height
= 31
BevelKind
= bkFlat
BevelOuter
= bvNone
Caption
= 'Color'
TabOrder
= 2
end
end
object dlgOpenPic1: TOpenPictureDialog
Filter
= 'Bitmaps (*.bmp)|*.bmp'
Left
= 277
Top
= 360
end
object dlgColor1: TColorDialog
Left
= 232
Top
= 360
end
end

 

抱歉!评论已关闭.