如果您只想绘制图像格式并且不特别关心再次将其从应用程序中传回,那么您最好忘记子类化NSImageRep,而只创建一个NSBitmapImageRep具有与图像匹配的位深度和尺寸的图像。然后你要它的-bitmapData.
这将为您提供一个可以直接寻址的原始缓冲区,然后您可以将图像的每个像素逐一复制到缓冲区中的适当位置。
如果您真的想要一个 custom NSImageRep,那么您需要做的就是子类NSImageRep,然后在您的initWithData:方法中,您将图像数据存储在 ivar 中,然后调用所有各种方法来告诉图像代表它应该如何配置,例如-setBitsPerSample:等。该类-setPixelsHigh:的文档NSImageRep解释了在初始化图像时应该调用哪些方法。
要实现-draw,您实际上需要在当前上下文中绘制像素。显然,您如何做到这一点取决于您正在绘制的图像类型(例如,矢量格式将具有与位图格式非常不同的绘图代码)。
绘制位图图像的一种方法是遍历像素并NSRectFill()为每个像素调用一个像素大小的矩形,虽然效率不是特别高,但速度非常快。
但是,您最好直接NSBitmapImageRep在位图上下文中创建和操作像素(从 中返回-bitmapData)。然后你可以画出CGImageRep你可以从NSBitmapImageRep. 如果您NSBitmapImageRep在您的initWithData:方法中创建,您只需分配一次像素。