Racket 为什么尽管使用了';但我的球拍笔在两条线连接的地方画了额外的像素;对接和';斜接?

Racket 为什么尽管使用了';但我的球拍笔在两条线连接的地方画了额外的像素;对接和';斜接?,racket,pen,miter,Racket,Pen,Miter,我正在制作两个正方形,如下图所示 黄色圆圈不是图像的一部分,但它显示了一些我不希望出现的像素。我没有计算机图形方面的经验,但从我在文档中读到的内容来看,这些像素不应该存在。我是否有不切实际的期望,或者我是否做了一些错误的事情来获得这些“溢出”像素,如上图中的黄色圆圈所示 下面是生成这些框的代码 #lang racket/gui (define dc (new svg-dc% [width 64] [height 64

我正在制作两个正方形,如下图所示

黄色圆圈不是图像的一部分,但它显示了一些我不希望出现的像素。我没有计算机图形方面的经验,但从我在文档中读到的内容来看,这些像素不应该存在。我是否有不切实际的期望,或者我是否做了一些错误的事情来获得这些“溢出”像素,如上图中的黄色圆圈所示

下面是生成这些框的代码

     #lang racket/gui

(define dc (new svg-dc%  
                [width 64]
                [height 64]
                [output "boxes.svg"]
                [exists 'replace]))
(send dc start-doc "boxes.svg")
(send dc start-page)

        (define old-brush (send dc get-brush))
        (define old-pen (send dc get-pen))
        (send dc set-brush 
          (new brush% [style 'solid]
                      [color "White"]))
        (send dc set-pen 
          (new pen% [width 0]
                    [color "Black"]
                    [cap 'butt]
                    [join 'miter]))
        (send dc set-pen old-pen)
        (send dc set-brush old-brush)   

        (send dc set-pen
          (new pen% [width 0]
                    [color "Black"]
                    [cap 'butt]
                    [join 'miter]))
        (send dc set-brush 
          (new brush% [style 'solid]
                      [color "Red"]))
        (define path (new dc-path%))
        (send path move-to 0 0)
        (send path line-to 10 0)
        (send path line-to 10 10)
        (send path line-to 0 10)
        (send path close)
        (send dc draw-path path 0 0)
        (send dc set-pen old-pen)
        (send dc set-brush old-brush)

        (send dc set-pen 
          (new pen% [width 0]
                    [color "Black"]
                    [cap 'butt]
                    [join 'miter]))
        (send dc set-brush
          (new brush% [style 'solid]
                      [color "Blue"]))
        (define path2 (new dc-path%))
        (send path2 move-to 0 0)
        (send path2 line-to 10 0)
        (send path2 line-to 10 10)
        (send path2 line-to 0 10)
        (send path2 close)
        (send dc draw-path path2 10 0)
        (send dc set-pen old-pen)
        (send dc set-brush old-brush)

(send dc end-page)
(send dc end-doc)

这只是一个评论,但我需要更多的空间

注意事项:

anti aliasing  - turn it of
smoothing      - is the mode unsmoothed or aligned?
假设第一个像素具有相反的角点(0,0)和(1,1)。 无需校准,您可以选择大小和尺寸的方形笔 在(0.5,0.5)处做一个点,以避免在像素外绘制

如果事情是一致的,你需要相应地调整

请参见
设置平滑

更新

据我所知,添加一行:

(send dc set-smoothing 'aligned)

开始时,将解决问题。

您能发布一个完整的示例吗?我们可以尝试吗?我已经更新了帖子,以便可以复制和粘贴代码部分以生成图像。我还没有尝试答案部分中的建议,但我会在时间允许的情况下尽快尝试。最初测试(发送dc集平滑“未平滑”),因为“平滑”和“对齐”是启用抗锯齿的平滑模式,但不幸的是,输出是相同的。当我测试“对齐模式”时,同样的输出出现,但当我使用“平滑模式”测试输出时,污迹似乎消失了;也就是说,(发送dc集平滑处理)修复了该问题。你能分享一些关于为什么抗锯齿模式有帮助的想法吗?为了找到抗锯齿入门(回想一下,计算机图形学的初学者,但我不怕数学)需要搜索哪些关键字。因为你说的是像素,我希望你在位图(或画布)上绘制,然后另存为,比如png。对于矢量格式的SVG,我有点不确定反Alaising是否有效果。假设您想从点a到点B绘制一条斜率非零的直线。如果放大,将显示楼梯效果。用灰色像素填充楼梯将产生线条更平滑的错觉。看见