Different rendering when using image-snip and pict

Hi,

I'm getting different rendering when I use image-snip% compared to pict's dc.

I think the difference is the rendering is assuming a different resolution display but I am not entirely sure.

I've included a simple demo and and a screen capture.

Best regards,
Stephen

#lang racket/gui
(require pict)

(define target2 (make-bitmap 110 110))
(define tdc (new bitmap-dc% [bitmap target2]))
(send tdc set-pen "black" 1 'solid)
(send tdc set-brush "orange" 'solid)
(send tdc draw-ellipse 5 5 100 100)

(make-object image-snip% target2)

(dc (λ (dc dx dy)
      (define old-brush (send dc get-brush))
      (define old-pen (send dc get-pen))
      (send dc set-pen "black" 1 'solid)
      (send dc set-brush "orange" 'solid)
      (send dc draw-ellipse 5 5 100 100)
      (send dc set-brush old-brush)
      (send dc set-pen old-pen))
    300 300)

Thanks @soegaard

I can get the same lovely smooth edge with #:backing-scale 2 and set-smoothing to 'aligned.

Reviewing pict.rkt verifies this pict/pict-lib/pict/private/pict.rkt at master · racket/pict · GitHub

The relevant documentation is

#lang racket/gui
(require pict)

(define target2 (make-bitmap 110 110 #:backing-scale 2))
(define tdc (new bitmap-dc% [bitmap target2]))
(send tdc set-smoothing 'aligned)
(send tdc set-pen "black" 1 'solid)
(send tdc set-brush "orange" 'solid)
(send tdc draw-ellipse 5 5 100 100)
(make-object image-snip% target2)

(dc (λ (dc dx dy)
      (define old-brush (send dc get-brush))
      (define old-pen (send dc get-pen))
      (send dc set-pen "black" 1 'solid)
      (send dc set-brush "orange" 'solid)
      (send dc draw-ellipse 5 5 100 100)
      (send dc set-brush old-brush)
      (send dc set-pen old-pen))
    300 300)
1 Like