NSImage drawInRect:fromRect:operation:fraction导致图像翻转

5
当我使用以下命令时:

[iconImage drawInRect:NSMakeRect(cellFrame.origin.x+5,yOffset+3,cellFrame.size.height-6, cellFrame.size.height-6)
                     fromRect:NSMakeRect(0,0,[iconImage size].width, [iconImage size].height)
                    operation:NSCompositeSourceOver
                     fraction:1.0];

在NSOutlineView单元格中绘制一些图像时,这些图像被垂直翻转了。我该如何解决?

谢谢


是的,我也需要它在10.5-10.8中运行,并且设置翻转不会影响在10.8中的绘图。此外,我记得设置负高度的源图像会导致翻转,但在这里似乎不起作用。 - Grady Player
1个回答

8

使用该方法

- (void)drawInRect:(NSRect)dstSpacePortionRect
          fromRect:(NSRect)srcSpacePortionRect
         operation:(NSCompositingOperation)op
          fraction:(CGFloat)requestedAlpha
    respectFlipped:(BOOL)respectContextIsFlipped
             hints:(NSDictionary *)hints

- (void)lockFocusFlipped:(BOOL)flipped一起使用,可以倒置绘制图像。参考NSImage 参考手册


谢谢,我可以使用您的方法将图像翻转回来,但是当我绘制它时,它已经垂直翻转了,这不奇怪吗?我只想按原样绘制原始图像。 - aneuryzm
这并不奇怪,因为CoreGraphics和Carbon将原点放在左上角,而Cocoa(App Kit)和OpenGL使用左下角作为原点。就代码中所有的事情而言,它取决于解释。例如,值0x20本身是没有意义的。如果将其解释为整数,则为32;如果将其解释为ASCII,则为一个空格。 - Mark
3
同时将NSZeroRect作为srcSpacePortionRect参数传递,整个图像将被绘制。这样可以避免编写NSMakeRect(0,0,[iconImage size].width, [iconImage size].height)的代码。 - Owain Hunt
我有一个问题:您的方法仅适用于OSX 10.6及以上版本,但我也需要它适用于OSX 10.5。您知道如何在OSX 10.5中翻转我的图像吗? - aneuryzm
1
我正在使用已弃用的setFlipped:方法,适用于OSX 10.5。 - aneuryzm
BOOL wasFlipped = [image isFlipped]; [image setFlipped:YES]; [image drawInRect ...]; [image setFlipped:wasFlipped];或者,您可以将图像更改为使用TIFF格式,然后在所有版本的Mac OS X中以某种原因正确绘制(这可能是一种方便错误)。 - user1985657

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接