2012-03-10 109 views
0

我想使用drawInRect方法绘制NSImage的精灵。我很快注意到,通过rects传递的坐标不是以像素为单位,而是以点为单位。我需要以像素级准确度来绘制我的精灵,因为每个精灵都会说尺寸正好是73x92像素。如何用NSImage绘制一个精灵?

总之,它似乎我需要以下任何一种: 1)NSImage接受我的像素不是其他单位的矩阵。 2)从像素到NSImage单元的非常准确的转换,使得寻址像素不会由于抗锯齿效应而导致任何模糊。

+1

为什么不把每个图像分解成单独的图像? – 2012-03-10 15:58:49

+1

你将不得不给我们一个例子,可能与示例图像,你可能会受到75/72 dpi转换造成的一些抗锯齿... – 2012-03-10 20:21:12

+0

我与彼得。当您可以单独加载图像时,为什么要打扰精灵图表呢?我了解iOS/OpenGL可以提高性能,但Mac功能非常强大,实际上很少需要使用精灵表。 – 2012-03-11 00:02:23

回答

1

NSImage没有任何根本性的错误,这将使这不可能。如果您给它适当的源代码和目标代码,它肯定能够以像素级别的准确度进行绘制。您必须发布您的代码才能在这方面提供帮助。

但是,您可能会发现处理较低级别的API更容易。 NSImage旨在处理任何看起来像图像的东西 - 位图,PDF等等。这种普遍性及其年龄会导致一些令人困惑的行为。我发现使用CGImage(总是一个位图)可以更容易预测。或者,试试NSBitmapImageRep。

+0

注意到像素每英寸与'NSImage'有关系也很重要。 'NSImage'将尊重源图像文件的PPI并适当地绘制它。如果您的源图像不是72ppi,那么将使用抗锯齿技术来绘制,如Grady Player指出的那样。 “CGImage”和“NSBitmapImageRep”都是纯粹的位图格式,其中使用ppi没有意义。 – 2012-03-11 01:20:15