Racket 中的高 DPI 支持

High DPI support in Racket

我正在 Racket 中创建一个简单的程序,它导入两个位图并将它们导出到一个图像中。我的 MacBook 上的像素密度有问题,因为图像不是视网膜图像。对于我的图像处理,我使用的是 2htdp/image 库。

有没有办法设置我的球拍程序的像素密度?


导出图片的行是:

(save-image final-image "final.png" WIDTH HEIGHT)

我尽量不包含太多信息,但如果我可以添加任何内容(例如更多代码)以使我的问题更清楚,请告诉我。


P.S:处理通过以下方式处理此问题:

https://processing.org/reference/displayDensity_.html

这不是一个完整的答案,但也许可以帮助您入门。

首先,你说"the images are non-retina"。这可能是一种误解。 "retina"这个词是用来描述屏幕的分辨率的,你正好 要使用(如果屏幕像素太小,屏幕大致为 "retina" 眼睛看不到单个点)。

但是,我的猜测是,当您在屏幕上绘制加载的图像时,它 显示为一半尺寸,您期待吗?

原因可在“1.8 屏幕分辨率和文本缩放”部分找到 gui 的文档中有以下内容:

On Mac OS, screen sizes are described to users in terms of drawing units. A Retina display provides two pixels per drawing unit, while drawing units are used consistently for window sizes, child window positions, and canvas drawing. A “point” for font sizing is equivalent to a drawing unit.

一种解决方案是将加载的图像缩放到两倍大小:

(scale 2 the-loaded-image)

画之前。

最后,程序如何知道当前显示器是否是视网膜显示器? 函数get-display-backing-scale就是你需要的:

(require racket/gui/base)
(get-display-backing-scale)

如果屏幕是 Retina,它将 return 2.0,否则为 1.0。 如果您有多个显示器,请查找功能 在文档中查看有关处理该问题的详细信息。