delphi高手们帮助呀, 我用了很多方法,都不能实现画圆无锯齿,photoshop中画圆就没有锯齿.如何编写的了,请帮助. delphi高手们帮助呀, 我用了很多方法,都不能实现画圆无锯齿,photoshop中画圆就没有锯齿.如何编写的了,请帮助. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大版ehom好像对这方面比较专长,你问问他! use anti-aliasing? { Originally written by Horst Kniebusch, modified by alioth to make it(alot) faster. } procedure Antialiasing(Image: TImage; Percent: Integer); type TRGBTripleArray = array[0..32767] of TRGBTriple; PRGBTripleArray = ^TRGBTripleArray; var SL, SL2: PRGBTripleArray; l, m, p: Integer; R, G, B: TColor; R1, R2, G1, G2, B1, B2: Byte; begin with Image.Canvas do begin Brush.Style := bsClear; Pixels[1, 1] := Pixels[1, 1]; for l := 0 to Image.Height - 1 do begin SL := Image.Picture.Bitmap.ScanLine[l]; for p := 1 to Image.Width - 1 do begin R1 := SL[p].rgbtRed; G1 := SL[p].rgbtGreen; B1 := SL[p].rgbtBlue; // Left if (p < 1) then m := Image.Width else m := p - 1; R2 := SL[m].rgbtRed; G2 := SL[m].rgbtGreen; B2 := SL[m].rgbtBlue; if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then begin R := Round(R1 + (R2 - R1) * 50 / (Percent + 50)); G := Round(G1 + (G2 - G1) * 50 / (Percent + 50)); B := Round(B1 + (B2 - B1) * 50 / (Percent + 50)); SL[m].rgbtRed := R; SL[m].rgbtGreen := G; SL[m].rgbtBlue := B; end; //Right if (p > Image.Width - 2) then m := 0 else m := p + 1; R2 := SL[m].rgbtRed; G2 := SL[m].rgbtGreen; B2 := SL[m].rgbtBlue; if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then begin R := Round(R1 + (R2 - R1) * 50 / (Percent + 50)); G := Round(G1 + (G2 - G1) * 50 / (Percent + 50)); B := Round(B1 + (B2 - B1) * 50 / (Percent + 50)); SL[m].rgbtRed := R; SL[m].rgbtGreen := G; SL[m].rgbtBlue := B; end; if (l < 1) then m := Image.Height - 1 else m := l - 1; //Over SL2 := Image.Picture.Bitmap.ScanLine[m]; R2 := SL2[p].rgbtRed; G2 := SL2[p].rgbtGreen; B2 := SL2[p].rgbtBlue; if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then begin R := Round(R1 + (R2 - R1) * 50 / (Percent + 50)); G := Round(G1 + (G2 - G1) * 50 / (Percent + 50)); B := Round(B1 + (B2 - B1) * 50 / (Percent + 50)); SL2[p].rgbtRed := R; SL2[p].rgbtGreen := G; SL2[p].rgbtBlue := B; end; if (l > Image.Height - 2) then m := 0 else m := l + 1; //Under SL2 := Image.Picture.Bitmap.ScanLine[m]; R2 := SL2[p].rgbtRed; G2 := SL2[p].rgbtGreen; B2 := SL2[p].rgbtBlue; if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then begin R := Round(R1 + (R2 - R1) * 50 / (Percent + 50)); G := Round(G1 + (G2 - G1) * 50 / (Percent + 50)); B := Round(B1 + (B2 - B1) * 50 / (Percent + 50)); SL2[p].rgbtRed := R; SL2[p].rgbtGreen := G; SL2[p].rgbtBlue := B; end; end; end; end; end; //Example: procedure TForm1.Button1Click(Sender: TObject); begin Antialiasing(Image1, 80); end; Borland疯了! 不加UC为好友,直接向其发信息! 程序运行一段时间后自动退出。寻求原因 用论坛里的des算法加密解密时出的问题 求助!!!!!Delphi如何处理TabSheet中Form的KeyDown事件 用Apro做传真系统时能否实现横向传真? 对EXE文件加密(可另加分) 请各位大虾帮忙!下面的大概是什么意思? 用Delphi6向Oracle8中的表插入图片(BLOB) 请教高手abort的问题 请问分数是用来干什么的,为什么要散分,为什么要接分,分有什么用,请高手指教!!! 请问各位大侠哪一个有etcell正版控件?
{
Originally written by Horst Kniebusch, modified by alioth to make it(alot) faster.
} procedure Antialiasing(Image: TImage; Percent: Integer);
type
TRGBTripleArray = array[0..32767] of TRGBTriple;
PRGBTripleArray = ^TRGBTripleArray;
var
SL, SL2: PRGBTripleArray;
l, m, p: Integer;
R, G, B: TColor;
R1, R2, G1, G2, B1, B2: Byte;
begin
with Image.Canvas do
begin
Brush.Style := bsClear;
Pixels[1, 1] := Pixels[1, 1];
for l := 0 to Image.Height - 1 do
begin
SL := Image.Picture.Bitmap.ScanLine[l];
for p := 1 to Image.Width - 1 do
begin
R1 := SL[p].rgbtRed;
G1 := SL[p].rgbtGreen;
B1 := SL[p].rgbtBlue; // Left
if (p < 1) then m := Image.Width
else
m := p - 1;
R2 := SL[m].rgbtRed;
G2 := SL[m].rgbtGreen;
B2 := SL[m].rgbtBlue;
if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then
begin
R := Round(R1 + (R2 - R1) * 50 / (Percent + 50));
G := Round(G1 + (G2 - G1) * 50 / (Percent + 50));
B := Round(B1 + (B2 - B1) * 50 / (Percent + 50));
SL[m].rgbtRed := R;
SL[m].rgbtGreen := G;
SL[m].rgbtBlue := B;
end; //Right
if (p > Image.Width - 2) then m := 0
else
m := p + 1;
R2 := SL[m].rgbtRed;
G2 := SL[m].rgbtGreen;
B2 := SL[m].rgbtBlue;
if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then
begin
R := Round(R1 + (R2 - R1) * 50 / (Percent + 50));
G := Round(G1 + (G2 - G1) * 50 / (Percent + 50));
B := Round(B1 + (B2 - B1) * 50 / (Percent + 50));
SL[m].rgbtRed := R;
SL[m].rgbtGreen := G;
SL[m].rgbtBlue := B;
end; if (l < 1) then m := Image.Height - 1
else
m := l - 1;
//Over
SL2 := Image.Picture.Bitmap.ScanLine[m];
R2 := SL2[p].rgbtRed;
G2 := SL2[p].rgbtGreen;
B2 := SL2[p].rgbtBlue;
if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then
begin
R := Round(R1 + (R2 - R1) * 50 / (Percent + 50));
G := Round(G1 + (G2 - G1) * 50 / (Percent + 50));
B := Round(B1 + (B2 - B1) * 50 / (Percent + 50));
SL2[p].rgbtRed := R;
SL2[p].rgbtGreen := G;
SL2[p].rgbtBlue := B;
end; if (l > Image.Height - 2) then m := 0
else
m := l + 1;
//Under
SL2 := Image.Picture.Bitmap.ScanLine[m];
R2 := SL2[p].rgbtRed;
G2 := SL2[p].rgbtGreen;
B2 := SL2[p].rgbtBlue;
if (R1 <> R2) or (G1 <> G2) or (B1 <> B2) then
begin
R := Round(R1 + (R2 - R1) * 50 / (Percent + 50));
G := Round(G1 + (G2 - G1) * 50 / (Percent + 50));
B := Round(B1 + (B2 - B1) * 50 / (Percent + 50));
SL2[p].rgbtRed := R;
SL2[p].rgbtGreen := G;
SL2[p].rgbtBlue := B;
end;
end;
end;
end;
end;
//Example:
procedure TForm1.Button1Click(Sender: TObject);
begin
Antialiasing(Image1, 80);
end;