 Mirror

How to use antialising (Views: 100)

 Problem/Question/Abstract:You want to use the Antialising effect in your application, but you don't know how.Answer:First you have to know how Antialising work. For every pixel in the canvas and it's neighbors must be create the color difference between both color values.  That's all. You just have to go through all pixels of your canvas and do this.With the following procedure you create your custom Antialising effect. The procedure needs the grade (Percent) of the Antialising effect. If Percent is 0, there will be no effekt, up to 100 there will be a more stronger effect.procedure Antialising(C: TCanvas; Rect: TRect; Percent: Integer);var  l, p: Integer;  R, G, B: Integer;  R1, R2, G1, G2, B1, B2: Byte;begin  with c do  begin    for l := Rect.top to Rect.Bottom do    begin      for p := Rect.left to Rect.right do      begin        R1 := GetRValue(Pixels[p, l]);        G1 := GetGValue(Pixels[p, l]);        B1 := GetBValue(Pixels[p, l]);        R2 := GetRValue(Pixels[p - 1, l]);        G2 := GetGValue(Pixels[p - 1, l]);        B2 := GetBValue(Pixels[p - 1, l]);        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));          Pixels[p - 1, l] := RGB(R, G, B);        end;        R2 := GetRValue(Pixels[p + 1, l]);        G2 := GetGValue(Pixels[p + 1, l]);        B2 := GetBValue(Pixels[p + 1, l]);        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));          Pixels[p + 1, l] := RGB(R, G, B);        end;        R2 := GetRValue(Pixels[p, l - 1]);        G2 := GetGValue(Pixels[p, l - 1]);        B2 := GetBValue(Pixels[p, l - 1]);        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));          Pixels[p, l - 1] := RGB(R, G, B);        end;        R2 := GetRValue(Pixels[p, l + 1]);        G2 := GetGValue(Pixels[p, l + 1]);        B2 := GetBValue(Pixels[p, l + 1]);        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));          Pixels[p, l + 1] := RGB(R, G, B);        end;      end;    end;  end;end;Note: There must be some lines or something else on the canvas, otherwise there is no effect.

<< Back to main page