2010-10-11 50 views
0

嗨, 我有一个大的图像,然后即时通过提取所述图像的一部分的:NSImage中坐标

[mBaseImage lockFocus]; 
NSBitmapImageRep* bitmapImageRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect: NSMakeRect(startX,startY,width,height)]; 
[mBaseImage unlockFocus]; 

后跟:

extractedImage = [[NSImage alloc] initWithSize:[bitmapImageRep size]]; 
[extractedImage addRepresentation:bitmapImageRep]; 

其中extractedImage NSImage中是*。

后来而我试图绘制使用NSDrawNinePartImage的extractedImage,我意识到,虽然我在http://www.karlkraft.com/index.php/2007/11/14/nsdrawninepartimage/ 指定以下的例子中的9份我意识到,当我指定0,0它显示的左上handcorner图像,这意味着0,0是左上角而不是左下角,如链接中的示例所示。我尝试设置setFlipped,但它似乎只是翻转图像。有没有人有任何想法如何我可以将坐标回到0,0在左下角?

哦,我忘了提及我使用图像作为按钮,所以它作为NSButton呈现。

问候, 汉

+1

你是什么意思“它是作为一个NSButton呈现”?无法将NSImage放入视图层次结构中,那么您对图像执行的操作是什么,以及“NSDrawNinePartImage”调用的对象是什么? – 2010-10-11 08:23:31

+0

哦对不起。这是一个自定义NSButton的一部分。自定义的NSButton可以有一个NSImage。 drawRect被覆盖以包含[image drawInRect:....];以便在显示按钮时绘制图像。在drawInRect函数中,检查是否设置了标志useTile,如果是,则drawInRect将调用函数drawWithTiles并在将9张图像传递给NSDrawNinePartImage之前对用户定义的图像进行适当分割。 – han 2010-10-11 08:52:44

+0

您正在遵循的示例将在分辨率无关的非整数比例因子下失败。 : - 请处理您在网上发现的怀疑代码。它应该使用NSBitmapImageRep作为目标切片而不是NSImage,因为该代码特别与像素绑定。 – Ken 2010-10-11 19:40:03

回答

0

好吧,我发现了它。这是一个流氓[image setFlip:...]在代码中导致所有的混淆..

+1

请注意 - [NSImage setFlipped:]已弃用。有关更多讨论,请参阅http://developer.apple.com/library/mac/#releasenotes/Cocoa/AppKit.html上的AppKit发行说明 – Ken 2010-10-11 19:38:21