替换bmp图片中的颜色 good
工作中,经常需要将bmp图片中的某个颜色修改为另外一种颜色。比如:将图片中的所有白色均修改成灰色。
平时都是拿画图板中的油漆桶工具一点一点的刷,费时又费力。(这么干好几年了 :( )
今天抽空编了一个小软件,实现了这种功能。
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:= to height- do
begin
for w := to width- 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 < then
begin
OriginalColor := GetPixel(GetDC(), 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 < then
begin
Changedtoc := GetPixel(GetDC(), 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.
http://www.cnblogs.com/dabiao/archive/2010/09/09/1822238.html
替换bmp图片中的颜色 good的更多相关文章
- 图片攻击-BMP图片中注入恶意JS代码 <转载>
昨天看到一篇文章<hacking throung images>,里面介绍了如何在BMP格式的图片里注入JS代码,使得BMP图片既可以正常显示, 也可以运行其中的JS代码,觉得相当有趣. ...
- 提取bmp图片的颜色信息,可直接framebuffer显示(c版本与python版本)
稍微了解了下linux的framebuffer,这是一种很简单的显示接口,直接写入像素信息即可 配置好的内核,会有/dev/fbn 的接口,于是想能否提前生成一个文件,比如logo.fb,里面仅包含像 ...
- Qt5:图片彩色键控,设置图片中指定颜色的像素为透明
有图片 1.png 设置该图中的颜色为粉红色的像素为透明 QPixmap pix("1.png"); QBitmap mask= pix.createMaskFromColor(Q ...
- android开发 替换bitmap中的颜色值
/** * 将bitmap中的某种颜色值替换成新的颜色 * @param bitmap * @param oldColor * @param newColor * @return */ public ...
- imagecreatefrombmp、imagebmp php处理bmp文件
/*格式组成典型的BMP图像文件由四部分组成: 1:位图头文件数据结构,它包含BMP图像文件的类型.显示内容等信息: 2:位图信息数据结构,它包含有BMP图像的宽.高.压缩方法,以及定义颜色等信息: ...
- PNG,JPEG,BMP,JIF图片格式详解及其对比
原文地址:http://blog.csdn.net/u012611878/article/details/52215985 图片格式详解 不知道大家有没有注意过网页里,手机里,平板里的图片,事实上,图 ...
- CSS3颜色特征温故
网页是色彩的表现原理:显示器是由一个个像素构成,利用电子束来表现色彩.像素把光的三原色:红色(R).绿色(G).蓝色(B)组合成的色彩按照科学原理表现出来.一个像素包含8位元色彩的信息量,又从0 ~ ...
- Android5.0新特性——图片和颜色(drawable)
图片和颜色 tint属性 tint属性一个颜色值,可以对图片做颜色渲染,我们可以给view的背景设置tint色值,给ImageView的图片设置tint色值,也可以给任意Drawable或者NineP ...
- 如何将位图格式图片文件(.bmp)生成geotiff格式图片?
一.位图格式信息 位图BITMAPINFOHEADER 与BITMAPFILEHEADER: 先来看BITMAPINFOHEADER,只写几个主要的 biSize包含的是这个结构体的大小(包括颜色表) ...
随机推荐
- c++中basic_istream::getline()的返回值何时为真
今天在看primer,17ch中的IO库再探,做课后练习,要求用ifstream.getline(char*, const unsigned, char)读取一个文件,用循环: while(ifs.g ...
- Windows中的对象
来源 http://www.0xaa55.com/forum.php?mod=viewthread&tid=1401&extra=page%3D1 windows里常用句柄操作资源 ...
- 灵光一闪-VS设计界面能访问到private修饰的各种控件
大家都知道,用VS设计界面时,VS默认控件的访问修饰符为private,但是我就很奇怪,private修饰的字段不是只有类内部才能访问吗? 好神奇的VS,这到底是怎么实现的?难道就是类似文本编辑器的作 ...
- javascript新窗口打开链接window.open()被阻拦的解决办法
场景是ajax提交,比较后端效验数据,需要用户登录,提示后并需要新窗口打开登录的链接,使用window.open(url);往往会被浏览器认为是广告而被拦截. data.url是ajax返回的链接地址 ...
- mysql函数操作(6)
<?php try{ $dbh = new PDO('mysql:dbname=testdb;host=localhost', 'mysql_user', 'mysql_pwd'); }catc ...
- java中输出流OutputStream 类应用实例(转)
OutputStream类该类是字节输出流的抽象类,定义了输出流的各种操作方法.这些方法的说明如表1所示.下面通过实例介绍如何使用OutputStream类向控制台输出字符串信息.步骤如下.(1)创建 ...
- POJ 2686 Traveling by Stagecoach 壮压DP
大意是有一个人从某个城市要到另一个城市(点数<=30) 然后有n个马车票,相邻的两个城市走的话要消耗掉一个马车票. 花费的时间呢,是马车票上有个速率值,用边/速率就是花的时间. 问最后这个人花费 ...
- rsyslog 配置详解
格式:: 日志设备(类型).(连接符号)日志级别 日志处理方式(action) 日志设备(可以理解为日志类型): ------------------------ auth –pam产生的日志 aut ...
- VC2008如何生成及使用DLL(完整版)
生成.使用DLL看起来简单,但做起来才发现还是有一些地方需要注意的. 1. 打开VS2008,新建一个VC工程,选择Win32类型,Win32项目: 2. 应用程序类型选择DLL,附加选项选择到处符号 ...
- 愤怒的DZY(二分)
愤怒的DZY[问题描述]“愤怒的小鸟”如今已经是家喻户晓的游戏了,机智的WJC最近发明了一个类似的新游戏:“愤怒的DZY”.游戏是这样的:玩家有K个DZY,和N个位于不同的整数位置:X1,X2,…,X ...