【发布时间】:2010-10-11 07:29:23
【问题描述】:
大家好, 我有一个大图像,然后我通过以下方式提取图像的一部分:
[mBaseImage lockFocus];
NSBitmapImageRep* bitmapImageRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect: NSMakeRect(startX,startY,width,height)];
[mBaseImage unlockFocus];
接着是:
extractedImage = [[NSImage alloc] initWithSize:[bitmapImageRep size]];
[extractedImage addRepresentation:bitmapImageRep];
extractImage 是 NSImage *.
后来,当我尝试使用 NSDrawNinePartImage 绘制提取的图像时,我意识到当我按照 http://www.karlkraft.com/index.php/2007/11/14/nsdrawninepartimage/ 的示例指定 9 个部分时 我意识到当我指定 0,0 时,它显示图像的左上角,这意味着 0,0 是左上角,而不是链接中示例中的左下角。我尝试设置 setFlipped 但它似乎只是翻转图像。有谁知道如何将坐标返回到左下角 0,0 的位置?
哦,我忘了提到我将图像用作按钮,所以它显示为 NSButton。
问候, 韩
【问题讨论】:
-
“它以 NSButton 的形式呈现”是什么意思?无法将 NSImage 放入视图层次结构中,那么您究竟对图像做了什么,以及调用
NSDrawNinePartImage的对象是什么? -
对不起。这是自定义 NSButton 的一部分。自定义 NSButton 可以有一个 NSImage。 drawRect 被覆盖以包含 [image drawInRect:....];以便在显示按钮时绘制图像。在 drawInRect 函数中,检查是否设置了标志 useTile,如果是,则 drawInRect 将调用函数 drawWithTiles 并对图像进行适当的分割,坐标由用户定义,然后将 9 个图像传递给 NSDrawNinePartImage .
-
您所遵循的示例将在分辨率独立的非整数比例因子下失败。 :-/ 请对您在网上找到的代码持怀疑态度。它应该使用 NSBitmapImageRep 作为目标图块而不是 NSImage,因为该代码专门与像素相关联。
标签: objective-c cocoa nsimage