为指标线添加音量效果 - 页 4

 
barabashkakvn:
这些点是在没有抗锯齿的情况下绘制的。我特别选择了PixelSetAA 的方法--用抗锯齿画点。

试着用PixelSetAA 画一条线。

PolylineAA 方法使用LineAA 方法。LineAA 方法使用PixelSetAA 方法。通过绘制一个单点,你不会看到抗锯齿的效果。

 
tol64:
试着用PixelSetAA 画一条线。

不,没有影响。没有平滑的近点。尖角就像砖头。

通过PixelSetAA的线与点

附加的文件:
 
barabashkakvn:

不,没有影响。没有平滑的近点。尖角就像砖头

我对以前的帖子进行了补充。注意上述方法是如何实现的,如果需要平滑,就使用这些方法。
 
tol64:
我对之前的信息进行了补充。注意上述方法是如何实现的,如果你需要平滑,就使用它们。
我暂时不碰带平滑的画线方法--PolylineAA。我想了解帮助中所说的关于PixelSetAA 的内容。
PixelSetAA-使用抗锯齿算法绘制一个点

由于这个方法是用抗锯齿来画一个点,如果我连续画几个点,应该会得到这样的图像。

我想这是很多带有平滑功能的点应该有的样子

但我没有得到顺利的分数。

 
barabashkakvn:
我暂时不碰带平滑的画线方法--PolylineAA。我想了解帮助中关于PixelSetAA 的内容。
PixelSetAA-使用抗锯齿算法绘制一个点

由于这个方法是用抗锯齿来画一个点,如果我连续画几个点,应该会得到这样的图像

但我没有得到顺利的分数。

这就是为什么我建议你比较有抗锯齿和无抗锯齿的方法的代码。该代码是开放性的,可供研究。

要了解它,你需要彻底研究这些方法中使用的算法。

你甚至可以就这个主题写一篇文章。我自己也很高兴能读到它。)

 
点不能被磨平,在某种意义上它是一个'基本粒子' )
 
komposter:
一个点不能被磨平,在某种意义上它是一个 "基本粒子" )
那么问题来了:有两种方法(PixelSetPixelSetAA)。我对PixelSetAA 非常感兴趣--也许我不了解点平滑的工作原理?
 
barabashkakvn:
所以这就是问题所在:有两种方法(PixelSetPixelSetAA)。对PixelSetAA 非常感兴趣--也许我不了解点平滑的工作原理?

如果所有其他方法都失败了,请阅读帮助;)

PixelSet简单地设置点的颜色。

 
我们读了帮助。因此,问题是,"PixelSetAA 甚至应该使用抗锯齿来绘制一个点吗?"。我想听听大家的意见。
 
barabashkakvn:
我们读了帮助。因此,问题是,"PixelSetAA 甚至应该使用抗锯齿来绘制一个点吗?"。我想听听大家的意见。

答案是:PixelSetAA 方法甚至应该 使用抗锯齿绘制一个单点,而且它确实 使用抗锯齿绘制了 这个单点。为了做到这一点,我不得不研究CCanvas的代码。

//+------------------------------------------------------------------+
//| Draw pixel with antialiasing                                     |
//+------------------------------------------------------------------+
void CCanvas::PixelSetAA(const double x,const double y,const uint clr)
  {
   static double rr[4];
   static int    xx[4];
   static int    yy[4];
//--- preliminary calculations
   int    ix=(int)MathRound(x);
   int    iy=(int)MathRound(y);
   double rrr=0;
   double k;
   double dx=x-ix;
   double dy=y-iy;
   uchar  a,r,g,b;
   uint   c;
//--- no need for anti-aliasing
   if(dx==0.0 && dy==0.0)
     {
      PixelSet(ix,iy,clr);
      return;
     }
//--- prepare array of pixels
   xx[0]=xx[2]=ix;
   yy[0]=yy[1]=iy;
   if(dx<0.0)
      xx[1]=xx[3]=ix-1;
   if(dx==0.0)
      xx[1]=xx[3]=ix;
   if(dx>0.0)
      xx[1]=xx[3]=ix+1;
   if(dy<0.0)
      yy[2]=yy[2]=iy-1;
   if(dy==0.0)
      yy[2]=yy[2]=iy;
   if(dy>0.0)
      yy[2]=yy[2]=iy+1;
//--- calculate radii and sum of their squares
   for(int i=0;i<4;i++)
     {
      dx=xx[i]-x;
      dy=yy[i]-y;
      rr[i]=1/(dx*dx+dy*dy);
      rrr+=rr[i];
     }
//--- draw pixels
   for(int i=0;i<4;i++)
     {
      k=rr[i]/rrr;
      c=PixelGet(xx[i],yy[i]);
      a=(uchar)(k*GETRGBA(clr)+(1-k)*GETRGBA(c));
      r=(uchar)(k*GETRGBR(clr)+(1-k)*GETRGBR(c));
      g=(uchar)(k*GETRGBG(clr)+(1-k)*GETRGBG(c));
      b=(uchar)(k*GETRGBB(clr)+(1-k)*GETRGBB(c));
      PixelSet(xx[i],yy[i],ARGB(a,r,g,b));
     }
  }

类,并意识到只有当你传递一个双数类型的数字作为坐标时才会出现平滑,而不是一个四舍五入的值,而是有一个 "尾巴"。像200.4;125.6;200.7。

这是用PixelSetAA 方法用点画出的抛物线,它确实开始被画得很平滑了。

使用PixelSetAA方法用点画出的抛物线,它确实开始用平滑的方式画出来了

附加的文件:
原因: