卷积功能:避免1px向左上移动

时间:2016-01-13 05:20:27

标签: delphi image-processing convolution

我正在使用swissdelphicenter.ch中的Convolve函数。该功能看起来不错,但问题是最终图像向左上移1px。当您多次卷积图像时,这会变得更加突出。

事实证明我可以通过以下修改来解决这个问题,但如果源和目标是相同的图像,则该功能不起作用。

begin
  ...
  Result.Width := ABitmap.Width {- 2};
  Result.Height := ABitmap.Height {- 2};
  ...
  for LRow := 1 to ABitmap.Height - 3 do   //old val is 2
  ...
  LRowOut := Dst.ScanLine[LRow{ - 1}];
  ...
  LRowOut[LCol {- 1}].rgbtBlue  := trunc(LNewBlue);    
  LRowOut[LCol {- 1}].rgbtGreen := trunc(LNewGreen);
  LRowOut[LCol {- 1}].rgbtRed   := trunc(LNewRed);
  ...
end;

1 个答案:

答案 0 :(得分:2)

如果源和目标是相同的图像,则使用新的(已过滤的)内容重写扫描线(使用第(i-1),第i和第(i + 1)个来计算新的第i个)< / p>

所以请记住两条上部扫描线 - 使用Move例程将其内容复制到TempRow1和TempRow2,并在计算中使用这些TempRows。