请教有关图形图像问题(50分)

  • 主题发起人 主题发起人 arcore
  • 开始时间 开始时间
A

arcore

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟用Delphi已有较长时间,但主要是接触数据库应用方面。近段时间由于项目
需要,要用到图形图像编程技术,但小弟手上没有相关的技术资料,所以向朋友们请
教。分不够,小弟可以再加。小弟不常在论坛里面回贴,所以也没有多少“积蓄”,
请见谅:)
请问:怎么样用TrackBar实现图像的亮度、灰度、对比度的调节?怎么样实现图
像反色和伪彩?
我知道,这些问题对于常搞图形图像处理的朋友来说很简单。由于我没有接触过
,所以请大家帮帮忙。并不要求有详细的源代码(当然,有更好),请指出实现方法
的技术细节,如果有相关组件可用(免费),也请指出下载网址。如果手上有现成的组
件或处理方法,请帮帮忙,Mail我一份:arcore@163.com,真诚感谢!
 
我查了以前的贴子,但解决的方法都不怎么详尽,所以,我会把实现我问的几点
问题的方法的源代码贴出来,和大家共享!
 
反色的问题已经解决,代码如下:

//图像反色
procedure TForm1.InvertImage(const AnImage:TImage);
var
vi_width, vi_height: integer;
p : pByteArray;
intTemp : integer;//通道数
begin
if AnImage.Picture.Bitmap.Empty then Exit;
//图像格式
//(pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit);
//位图通道值
case AnImage.Picture.Bitmap.PixelFormat of
pf8bit : intTemp := 1;
pf15bit, pf16bit : intTemp := 2;
pf24bit : intTemp := 3;
pf32bit : intTemp := 4;
else
intTemp := 1;
end;
//翻转每个像素的RGB数值
for vi_height := 0 to AnImage.Picture.Bitmap.Height - 1 do
begin
P := AnImage.Picture.Bitmap.ScanLine[vi_height];
for vi_width := 0 to AnImage.Picture.Bitmap.Width * intTemp - 1 do
P^[vi_width] := 255-P^[vi_width];
end;
end;
此代码在我的电脑上运行通过(Win98/Win2000,Delphi5)。但只能处理BMP格
式文件(因为目前我只要求BMP格试就可以),如果是其它格式的图片,要做一些转
换工作。
 
在网上发现一个更为简单的反色方法,用Bitblt实现,代码如下:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
BMP : TBitmap;
begin
Bmp := TBitmap.Create;
try
Bmp.Width := Image1.Picture.Bitmap.Width;
Bmp.Height := Image1.Picture.Bitmap.Height;
Bitblt(Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Image1.Picture.Bitmap.Canvas.Handle, 0, 0, NOTSRCCOPY);
Image1.Picture.Bitmap.Assign(Bmp);
finally
Bmp.Free;
end;
end;

此代码在我的电脑上运行通过。
 
FastLib
Graphics32
AAFont
等组件包都不错
 
轻松虎:
你手头上有吗?可否MAIL我一份?
 
to arcore :已发。
 
轻松虎:
谢谢,邮件已收到,我正在看里面的东西。
 
上面我所提到的问题中,除了图像的伪彩技术没有实现以外,其它的问题都已
经解决(是用FastBmp组件实现) 。由于是用组件解决的,源代码我就不一一贴出来
了。如果有朋友要FastBmp组件,可以打于www.Google.com,录入“FastBmp”搜索
所有中文网页,可以查到一大堆FastBmp组件的下载网址,我是在CSDN里面下载的。
有这方面需求的朋友可以打开FastBmp的源代码看看。
再加150分,请精于图形图像处理的朋友帮帮忙,解决一下图像的伪彩技术。
 
再加150分,请精于图形图像处理的朋友帮帮忙,解决一下图像的伪彩技术。
 
//灰度图像转成伪彩色
procedure GrayToColor(Bmp: TBitmap);
var
i, j, uG: Integer;
P: PByteArray;
begin
Bmp.PixelFormat := pf24bit;
for j := 0 to Bmp.Height - 1 do
begin
P := Bmp.ScanLine[j];
for i := 0 to Bmp.Width - 1 do
begin
uG := P[3 * i];
if (0 <= uG) and (uG < 63) then //灰度------>伪彩色
begin
P[3 * i + 2] := 0;
P[3 * i + 1] := 254 - 4 * uG;
P[3 * i] := 255;
end;
if (64 <= uG) and (uG < 127) then
begin
P[3 * i + 2] := 0;
P[3 * i + 1] := 4 * uG - 254;
P[3 * i] := 510 - 4 * uG;
end;
if (128 <= uG) and (uG < 191) then
begin
P[3 * i + 2] := 4 * uG - 510;
P[3 * i + 1] := 255;
P[3 * i] := 0;
end;
if (192 <= uG) and (uG <= 255) then
begin
P[3 * i + 2] := 255;
P[3 * i + 1] := 1022 - 4 * uG;
P[3 * i] := 0;
end;
end;
end;
end;
 
多人接受答案了。
 
后退
顶部