请问大家Delphi里如何将图片转换成素描效果图.....(100分)

  • 主题发起人 主题发起人 lovetxp
  • 开始时间 开始时间
L

lovetxp

Unregistered / Unconfirmed
GUEST, unregistred user!
请问大家Delphi里如何将图片转换成素描效果图.....
 
什么样的素描图:查了一下,就是先变灰度,然后查找边缘->浮雕

下边这个代码是用来实现灰度浮雕的,你看看,有没有帮助,估计原理类似
procedure TForm1.GraysculClick(Sender: TObject);
var
bitmap: TBitmap;
x, y: integer;
O, T: pByteArray;
Value: Byte;
begin
bitmap := TBitmap.Create;
bitmap.Width := image1.Width;
bitmap.Height := image1.Height;
bitmap.Assign(image1.Picture.Bitmap);
for x := 0 to bitmap.Height - 2 do
begin
O := bitmap.ScanLine[x];
T := bitmap.ScanLine[x + 1];
for y := 0 to bitmap.Width - 1 do
begin
Value := O[3 * y + 2] - T[3 * y + 2] + 128;
O[3 * y + 2] := max(0, min(255, Value));
Value := O[3 * y + 1] - T[3 * y + 1] + 128;
O[3 * y + 1] := max(0, min(255, Value));
Value := O[3 * y] - T[3 * y] + 128;
O[3 * y] := max(0, min(255, Value));
end; //实现雕刻效果
end;
self.Canvas.Draw(image1.Left, image1.Top, bitmap);
end;
还有一个用于边缘检测的,你看看
procedure TMyPicture.Button5Click(Sender: TObject);
var
b0, b1: Tbitmap;
i, j: Integer;
p1, p2, p3, p4: pbyteArray;
begin
b0 := Tbitmap.Create;
b1 := Tbitmap.Create;
b0.Assign(Image1.Picture.Bitmap);
b1.Assign(Image1.Picture.Bitmap);
b0.PixelFormat := pf24bit;
b1.PixelFormat := pf24bit;
for i := 1 to b0.Height - 2 do
begin
p1 := b0.ScanLine[i - 1];
p2 := b0.ScanLine;
p3 := b0.ScanLine[i + 1];
p4 := b1.ScanLine;
for j := 1 to b0.Width - 2 do
begin
if (p2[3 * j + 2] = 0) and (p2[3 * j + 1] = 0) and (p2[3 * j] = 0) then
begin

if ((p2[3 * (j - 1) + 2] = 0) and (p2[3 * (j - 1) + 1] = 0) and
(p2[3 * (j - 1)] = 0)) and
((p2[3 * (j + 1) + 2] = 0) and (p2[3 * (j + 1) + 1] = 0) and
(p2[3 * (j + 1)] = 0)) and
((p1[3 * (j + 1) + 2] = 0) and (p1[3 * (j + 1) + 1] = 0) and
(p1[3 * (j + 1)] = 0)) and
((p1[3 * (j) + 2] = 0) and (p1[3 * (j) + 1] = 0) and (p1[3 * (j)]
= 0)) and
((p1[3 * (j - 1) + 2] = 0) and (p1[3 * (j - 1) + 1] = 0) and
(p1[3 * (j - 1)] = 0)) and
((p3[3 * (j - 1) + 2] = 0) and (p3[3 * (j - 1) + 1] = 0) and
(p3[3 * (j - 1)] = 0)) and
((p3[3 * (j) + 2] = 0) and (p3[3 * (j) + 1] = 0) and (p3[3 * (j)]
= 0)) and
((p3[3 * (j + 1) + 2] = 0) and (p3[3 * (j + 1) + 1] = 0) and
(p3[3 * (j + 1)] = 0)) then
begin
p4[3 * j + 2] := 255;
p4[3 * j + 1] := 255;
p4[3 * j] := 255;
end;
end;

end;
Image1.Picture.Bitmap.Assign(b1);
end;
b1.Free;
b0.Free;
end;
 
下载个FastLib图形特效库,应该有您需要的。
是pas文件,uses一下就可以使用。
 
后退
顶部