在photoshop中,选区有抗锯齿功能,至于不规则选区的实现我们可以利用mask图实现,也就是一副和图像一样大小的256色灰度图,在未开始抗锯齿时,选中的部分为白色,未选中的为黑色,如果开始抗锯齿,则在选区的边缘颜色有一个过渡,一般在水平方向或者垂直方向只涉及到两个像素,请问这个过渡大概是个什么算法,好像不是普通的模糊。

解决方案 »

  1.   

    procedure AntiAliasRect(clip: tbitmap; XOrigin, YOrigin,
      XFinal, YFinal: Integer);
    var
      Memo, x, y: Integer; (* Composantes primaires des points environnants *)
      p0, p1, p2: pbytearray;begin
      if XFinal < XOrigin then
      begin
        Memo := XOrigin; XOrigin := XFinal; XFinal := Memo; end; (* Inversion des valeurs   *)
      if YFinal < YOrigin then
      begin
        Memo := YOrigin; YOrigin := YFinal; YFinal := Memo; end; (* si diff俽ence n俫ative*)
      XOrigin := max(1, XOrigin);
      YOrigin := max(1, YOrigin);
      XFinal := min(clip.width - 2, XFinal);
      YFinal := min(clip.height - 2, YFinal);
      clip.PixelFormat := pf24bit;
      for y := YOrigin to YFinal do
      begin
        p0 := clip.ScanLine[y - 1];
        p1 := clip.scanline[y];
        p2 := clip.ScanLine[y + 1];
        for x := XOrigin to XFinal do
        begin
          p1[x * 3] := (p0[x * 3] + p2[x * 3] + p1[(x - 1) * 3] + p1[(x + 1) * 3]) div 4;
          p1[x * 3 + 1] := (p0[x * 3 + 1] + p2[x * 3 + 1] + p1[(x - 1) * 3 + 1] + p1[(x + 1) * 3 + 1]) div 4;
          p1[x * 3 + 2] := (p0[x * 3 + 2] + p2[x * 3 + 2] + p1[(x - 1) * 3 + 2] + p1[(x + 1) * 3 + 2]) div 4;
        end;
      end;
    end;procedure AntiAlias(clip: tbitmap);
    begin
      AntiAliasRect(clip, 0, 0, clip.width, clip.height);
    end;
    原理是取某点的上下左右的平均值做为新值
      

  2.   

    原理是取某点的上下左右的平均值做为新值  p1[x * 3] := (p0[x * 3] + p2[x * 3] + p1[(x - 1) * 3] + p1[(x + 1) * 3]) div 4;
          p1[x * 3 + 1] := (p0[x * 3 + 1] + p2[x * 3 + 1] + p1[(x - 1) * 3 + 1] + p1[(x + 1) * 3 + 1]) div 4;
          p1[x * 3 + 2] := (p0[x * 3 + 2] + p2[x * 3 + 2] + p1[(x - 1) * 3 + 2] + p1[(x + 1) * 3 + 2]) div 4;你这里似乎后面的过程的取样点已经不是原始图像了,而是修改后了的吧。
      

  3.   

    xzhifei  ,你能以这张图像为例,贴出你算法的效果吗,这张是没有抗锯齿的mask图。
      

  4.   

    有些模糊,锯齿严重的地方效果不是很好。
    CSDN无法上传图片了
      

  5.   

    有些模糊,锯齿严重的地方效果不是很好。
    CSDN无法上传图片了
      

  6.   

    GDI+中的画笔画和路径,抗锯齿效果看起来要比这个好得多,我在画圆角图片时也遇到这个问题,画笔边缘像素无法完全透明.但我用比较笨的办法,在原路径的基础上进行像素偏移拷贝,说白了就是在边缘处多拷贝两个像素点,这样看起就不会有未透明的像素(看起来像杂点)
      

  7.   

    用2值的mask来做的话是不行的。可以考虑用256色灰度图像做mask (本身已经有抗钜齿), 边界上的只取原始点的色彩的一部分。