原理:
图像的浮雕处理效果就是突出图像中物体,而突出图像中的物体一般是加强物体边界的显示效果。一般采用的方法是:如果两个相邻的像素差别不大,则认为这两个像素在一个物体上,此时可以用一个颜色填充,如果两个相邻像素颜色差别较大则显然不在一个物体上,此时加强边界效果。
实例:
var
Form19: TForm19;
Map1: TBitmap;
implementation
{$R *.dfm}
procedure TForm19.FormCreate(Sender: TObject);
begin
OpenDialog1.DefaultExt:=GraphicExtension(TBitmap);
OpenDialog1.Filter:=GraphicFilter(TBitmap);
if OpenDialog1.Execute then
begin
Map1:=TBitmap.Create;
Map1.LoadFromFile(OpenDialog1.FileName);
Image1.Picture.Bitmap:=Map1;
end;
end;
procedure TForm19.Button1Click(Sender: TObject);
var
xmax,ymax,i,j:integer;
r,g,b:integer;
begin
xmax:=Image1.Picture.Bitmap.Width-1;
ymax:=Image1.Picture.Bitmap.Height-1;
Label1.Caption:='浮雕特效处理中,请稍后...';
form19.Refresh;
Progressbar1.Min:=0;
progressbar1.Max:=xmax;
progressbar1.Position:=0;
progressbar1.Step:=1;
form19.refresh;
for i:=0 to xmax-1 do
begin
progressbar1.StepIt;
for j:=0 to ymax-1 do
begin
r:=GetRValue(Image1.Canvas.Pixels[i,j])-GetRValue(Image1.Canvas.Pixels[i+1,j+1])+128;
g:=GetGValue(Image1.Canvas.Pixels[i,j])-GetGValue(Image1.Canvas.Pixels[i+1,j+1])+128;
b:=GetBValue(Image1.Canvas.Pixels[i,j])-GetBValue(Image1.Canvas.Pixels[i+1,j+1])+128;
if r>255 then r:=255
else if r<0 then r:=0;
if g>255 then g:=255
else if g<0 then g:=0;
if b>255 then b:=255
else if b<0 then b:=0;
Image1.Canvas.Pixels[i,j]:=RGB(r,g,b);
end;
end;
image1.Refresh;
Label1.Caption:='浮雕特效处理完成...';
end;