anchor.diff:  var
     p: ^longword;
     pmsk: ^byte;
  -  c: longword;
  +  c, n: longword;
     linecnt: integer;
     pixelcnt: integer;
     bit: byte;
     msklinelen: integer;
  +  row, col: integer;
   begin
     if FColorDepth = 1 then
       Exit; //==>
  
positive.code: unit fpg_base;
  
  {$mode objfpc}{$H+}
  
  interface
  
  
negative.code: 
    c := p^;  // the sample
  
    for row := 0 to FHeight-1 do
    begin
      for col := 0 to FWidth-1 do
      begin
        n := PLongWord(FImageData)[row * FWidth + col];
        if n = c then
          { set Alpha value 100% transparent }
          PLongWord(FImageData)[row * FWidth + col] := n and $00FFFFFF;
      end;
    end;
  
  {$else}
  
    AllocateMask;
    FMaskPoint := Point(x, y);
  
    p := FImageData;
    if x < 0 then
      Inc(p, FWidth - 1)
    else
      Inc(p, x);
    if y < 0 then
      Inc(p, FWidth * (FHeight - 1))
    else
      Inc(p, FWidth * y);
  
    c := p^;  // the sample
  
    msklinelen := FWidth div 32;
    if (FWidth and $1F) > 0 then
      Inc(msklinelen);
  