我现在用8段2次bezier曲线画了一个椭圆,现在想在椭圆没有边的时候也显示的比较光滑,而smoothingmode这个函数必须在有边的时候才有效,看以前的帖子别人说先将 bezier转换为一段段小直线, 再对直线进行反走样处理。所以我想问一下
我想问一下1、bezier怎样转换为一小段折线?
          2、栅格化后如何处理
       原帖地址:http://topic.csdn.net/t/20020525/15/751942.html
          

解决方案 »

  1.   

    用Windows 函数来实现吧dcResult.BeginPath();
    dcResult.Ellipse(&rc);
    dcResult.EndPath();
    dcResult.FlattenPath();
    unsigned long lNumPoints = dcResult.GetPath(NULL, NULL, 0);
    vector<CPoint> pts;
    pts.resize(lNumPoints);
    dcResult.GetPath(&pts[0], &Bytes[0], lNumPoints); 
      

  2.   

    能解释一下GetPath各个参数的意思吗?尤其是&Bytes[0]
      

  3.   

    我记得是点的连结方式(lineto,arcto,bezierto), 所与要调用下dcResult.FlattenPath();让path所有点连接方式变成lineto
    查查MSDN就知道了。
      

  4.   

    lpTypes   --------     Byte,一个字节数组中的第一个元素;这个数组定义了与每个坐标对应的操作类型。其中包括:   
          PT_MOVETO   
          坐标是一个新子路径的起始处   
          PT_LINETO   
          坐标是来自前一个坐标的一条线的终点   
          PT_BEZIERTO   
          肯定以三点一组的形式出现。头两个点是控制点,第三个是贝塞尔(Bezier)曲线的终点。PT_LINETO和PT_BEZIERTO也许能与PT_CLOSEFIGURE联合使用。在这种情况下,它代表一幅图象的最后一个点。将这个点与子路径的第一个连接起来后,路径就会封闭   
    =====================================
    囧...怎么用呢?
    1、第二个参数是指将得到的这些离散点如何处理吗?具体怎么用呢?能给个小程序不?2、第一个数组应该可以获得这些点的坐标值吧?或者我自己做个循环把每个小直线lineto可以不?那此时第二个参数应该填什么呢?
      

  5.   

    我这样写为什么读不出栅格化的点???
    前面的代码没贴,point21~28是3个点组成的beizer曲线的控制点数组,这8个数组围成一个闭合曲线.
    dc.BeginPath();
        dc.MoveTo(start4.x,start4.y);
    dc.PolyBezierTo(point21,3);
        dc.PolyBezierTo(point22,3);
    dc.PolyBezierTo(point23,3);
    dc.PolyBezierTo(point24,3);
    dc.PolyBezierTo(point25,3);
    dc.PolyBezierTo(point26,3);
    dc.PolyBezierTo(point27,3);
    dc.PolyBezierTo(point28,3);
    dc.EndPath(); dc.FlattenPath();
        CPoint pts_getdot[MaxNum];
    BYTE pts_byte[MaxNum];
        unsigned long lNumPoints = dc.GetPath(NULL, NULL, 0);
        CPoint Bytes[MaxNum];
        dc.GetPath(&pts_getdot[0],&pts_byte[0],lNumPoints); 
      

  6.   

    PolyBezier的确解决了...可是新的问题又来了..flattenpath打出来得点都是相邻的,
    也就是说,如果我对每2个点作为一个直线进行处理的化,无非就是平行于x轴、y轴的直线,或者45度角的直线~~~
    如果这样的化,我用反走样处理根本就没有意义了~~~因为平行于x轴、y轴的直线,或者45度角的直线本身就画得很好,不需要反走样我现在所需要做的就是将椭圆打成一些线段,这些线段不是相邻的,跨度比相邻的像素点要大一点,然后再对每条直线进行反走样处理,除了利用方程外,有谁有比较好的方法?