0

我有一个用于查看图像的 Mac 插件。它最初是用 Quickdraw 编写的,我正在尝试将其移至 Quartz。

我目前的问题是起源。在 QD 中,原点(明智地)是插件矩形的左上角。在 Quartz 中,它似乎是插件矩形顶部下方的一个屏幕高度(不包括 firefox 按钮等)。这实际上是在我的插件矩形中间的某个随机位置。

这也意味着我需要知道浏览器窗口的绘图部分的大小。我确定我可以算出一个窗口有多大,但是我如何算出标签等占用了多少空间?Mac 不知道这些事情,是吗?

在相关的说明中,有人知道为什么 Apple 决定将原点放在左下角吗?对我来说似乎有点愚蠢。

4

1 回答 1

1

如果您使用的是 NSView,您可以创建一个-isFlipped返回 YES 的函数的实现,这将允许您基于翻转的坐标系进行绘制。

或者,如果您不使用 NSView 而是在进行原始 CoreGraphics 绘图,则可以像这样修改 CTM:

CGContextScaleCTM( context, 1.0, -1.0 );

这来自这个 Apple Q&A 文档

如果您使用其他东西提供的 CGContextRef 执行此操作,则应首先保存现有的 CTM 并在完成后恢复它:

CGContextSaveGState( context );

// do your stuff here ...

CGContextRestoreGState( context );

哦,原点在左下角,因为 Quartz 渲染系统基于 PDF 图形系统,它本身基于 PostScript,并且原点在左下角。

于 2009-05-12T00:14:04.220 回答