我想制作一个应用程序,首先检查图像中的某个像素颜色。当它找到具有正确像素颜色的像素时,它将“突出显示”该像素。
但棘手的部分来了,之后我想检查“突出显示”像素的 8 个周围像素的颜色。如果这些周围像素之一是黑色的,则该像素的颜色应该改变。
我已经设法“突出显示”具有特定像素颜色的像素(请参见下面的代码),但我一直在寻找如何检查其周围像素的方法......
我希望我的问题很清楚。
procedure Tform_Main.analyzepixels (bitmapanalyse : TBitmap);
var
C: TColor;
X, Y:Integer;
Pixels : PRGBTripleArray
begin
bitmapanalyse := TBitmap.Create;
try
bitmapanalyse.Assign(FBitmap);
Form_memo.Memo1.Lines.BeginUpdate;
try
for Y := 0 to bitmapanalyse.Height - 1 do
begin
Pixels := bitmapanalyse.ScanLine[Y];
ProgressBar2.StepIt;
ProgressBar2.Update;
Application.ProcessMessages;
for X := 0 to bitmapanalyse.Width - 1 do
begin
if (Pixels[X].rgbtRed >= Pixelcolor) and
(Pixels[X].rgbtGreen >= Pixelcolor) and
(Pixels[X].rgbtBlue >= Pixelcolor)
then
begin
C := RGB(
Pixels[X].rgbtRed,
Pixels[X].rgbtGreen,
Pixels[X].rgbtBlue
);
Form_memo.Memo1.Lines.Add(
'===============' + sLineBreak +
'Pixel[' + IntToStr(X) + '; ' + IntToStr(Y) + ']' + sLineBreak +
'Color: ' + ColortoString(C))
;
Pixels[X].rgbtRed := 255;
Pixels[X].rgbtGreen := 255;
Pixels[X].rgbtBlue := 0;
end;
end;
end;
finally
Form_memo.Memo1.Lines.EndUpdate;
end;