NSImage -drawAtPoint:绘制太小

3
我正在使用这个方法来合并两个NSImages:
newImage = [[NSImage alloc] initWithSize:NSMakeSize(size1.width,
                                                    size1.height + size2.height)];
[newImage lockFocus];
[firimage drawAtPoint:NSMakePoint(0, 0)
             fromRect:NSMakeRect(0, 0, size1.width, size1.height)
            operation:NSCompositeSourceOver
             fraction:1.0];
[secimage drawAtPoint:NSMakePoint(0, size1.height)
             fromRect:NSMakeRect(0, 0, size2.width, size2.height)
            operation:NSCompositeSourceOver
             fraction:1.0];
[newImage unlockFocus];

它会生成一个正确尺寸的图像(两个2100x63的图像将生成一个100x126的图像),但是两个单独的图像绘制得太小,因此生成的图像大多为空白:
以下是原始图像: Image 1 Image 2

1
你的目标系统是什么?你知道在OSX10.6+中compositeToPoint:已经被弃用了吗? - foundry
"If你正在编写新代码或更新旧代码,应避免使用此方法。相反,您应该使用drawAtPoint:fromRect:operation:fraction:或drawInRect:fromRect:operation:fraction:方法来绘制图像。尽管该方法本身未被弃用,但其提供的行为不建议一般使用。" - Fatso
没有运气。结果仍然是一个尺寸正确的图像,但两个图像都被绘制得更小(例如,宽度为24像素而不是100)。这导致大部分是空白图像。 - Fatso
你能发布你的NSLog吗?(更新问题...) - foundry
更正:当我的家人停止下载时,我会做这件事,这样我就可以在不到10分钟的时间内阅读一个网站。 - Fatso
显示剩余15条评论
2个回答

1

我看到你解决了问题。当我使用你的代码时,也遇到了类似的奇怪结果。所以我开始思考我是否真正理解这些方法。

通常我总是使用-drawInRect:fromRect:operation:fraction,虽然我并不完全知道两个矩形如何影响结果,但我总能得到我需要的结果。

无论如何,我离开了一会儿,制作了一个小玩具应用程序来展示交互修改矩形的效果(使用两个图像,与你的问题相同)。

我已经将它放在github上了,你可能想要看一下。


0

正如我在评论中所说,使用-drawInRect:fromRect:operation:fraction解决了这个问题!


3
请注意,要绘制整个图像,您可以使用NSZeroRectfromRect,而不是NSMakeRect(0, 0, size1.width, size1.height) - paulmelnikow

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