为什么我的球拍笔在两条线连接的地方绘制额外的像素,尽管使用了"屁股"和"斜接"?



我正在制作两个正方形,如下图所示。一个红色和一个蓝色正方形

黄色圆圈不是图像的一部分,但它显示了一些我预计不会出现的像素。我没有计算机图形学的经验,但从我在文档中读到的内容来看,这些像素不应该存在。我是否有不切实际的期望,或者我做错了什么,得到了上图中黄色圆圈所示的"溢出"像素?

这是生成方框的代码。

#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(处做一个点,以免在像素外绘制。

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

参见set-smoothing

https://docs.racket-lang.org/draw/dc___.html#%28meth._%28%28%28lib._racket%2Fdraw..rkt%29._dc~3c~25~3e%29._set-smoothing%29%29

更新

据我所知,添加行:

(send dc set-smoothing 'aligned)

一开始就能解决问题。

相关内容

  • 没有找到相关文章

最新更新