gpt4 book ai didi

delphi - 洪水填充图像的一部分

转载 作者:行者123 更新时间:2023-12-03 15:12:53 26 4
gpt4 key购买 nike

我有一个像下面这样的图像
original image

我想让图像变得像
image result

我已经编写了代码,如下所示:

var
Tx,Ty, R,G,B,A, posX, posY : integer;
begin
posX :=-1; posY := -1;
for Ty:= 0 to Image1.Height-1 do
begin
for Tx:= 0 to Image1.Width-1 do
begin
R:= GetRValue(image1.Canvas.Pixels[Tx, Ty]);
G:= GetGValue(image1.Canvas.Pixels[Tx, Ty]);
B:= GetBValue(image1.Canvas.Pixels[Tx, Ty]);
A:= (R + G + B) Div 3;

if (A > 50) then
begin
Image1.Canvas.Pixels[Tx,Ty] := rgb(255,255,255);
end else
begin
Image1.Canvas.Pixels[Tx,Ty] := rgb(0,0,0);
if (posX < 0) then
begin
posX := Tx;
posY := Ty;
end;
end;
end;
end;
Image1.Canvas.Brush.Style := bsSolid;
Image1.Canvas.Brush.Color := clred;
Image1.Canvas.FloodFill(posX,posY,clBlack,fsSurface);
end;

我上面的编码只能使填充仅针对点。
my coding result

如何使洪水填充像结果图像一样?谢谢

最佳答案

您似乎想要将所有暗像素替换为红色,将所有亮像素替换为白色。你的代码就快到了。与其用黑色替换暗像素,然后对黑色像素进行泛色填充,不如直接将它们设置为红色,然后完全忘记泛色填充。

只需将代码中的 RGB(0,0,0) 替换为 clRed,并删除所有与洪水填充相关的代码即可。

我应该尝试解释什么是洪水填充以及为什么它没有达到您的预期。填充将所有颜色相似、连续相邻的像素的颜色更改为选定的种子像素。也就是说,它从您选择的像素开始,在您的情况下,(posX,posY)。它处理该像素,然后处理与该像素相邻的所有相同颜色的像素,然后处理与这些像素相邻的相同颜色的像素,依此类推。

在本例中,您从字母 i 上方的点中开始填充。 “洪水”从该点向外扩散,从一个黑色像素到另一个黑色像素,直到到达白色像素形成的边界。洪水永远不会到达字母 i 的主体,因为这些点与种子点不相邻。

来自维基百科的此链接有更多解释和一些可以帮助您理解的动画。 http://en.wikipedia.org/wiki/Flood_fill

关于delphi - 洪水填充图像的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23767303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com