objective-c - Mac 应用程序 - NSImage drawInRect 问题

标签 objective-c xcode cocoa

使用drawInRect我得到不一致的结果

有时图像绘制正确,有时图像看起来有半个像素的偏差:

enter image description here

在左上角,您会看到 slider 的上限图像正常绘制,然后填充边缘模糊,即使它们是使用相同的 x、y ...绘制的。

// top cap
[topCap drawInRect:NSMakeRect(5, 5, 11, 7)
          fromRect:NSZeroRect
         operation:NSCompositeSourceOver
          fraction:1];

// background fill
[topFill drawInRect:NSMakeRect(5, 12, 11, (CGRectGetHeight(aRect) - 23))
           fromRect:NSZeroRect
          operation:NSCompositeSourceOver
           fraction:1];

左下箭头,同样的情况。

中心右箭头,类似的情况。您可以看到左盖图像正确渲染,然后背景填充(1 像素宽的图像)变得模糊。

我想知道这是否与拉伸(stretch)图像有关,因为我试图填充矩形的图像渲染效果似乎很差。

感谢您的见解。

最佳答案

如果您知道为什么drawInRect会扭曲图像,请留下答案。这是我发现解决这个问题的方法:

对于某些区域,我使用了colorWithPatternImage

NSColor* backgroundFill = [NSColor colorWithPatternImage:backgroundImage];
[backgroundFill set];
NSRectFill(background);

我遇到的问题是图案原点设置为窗口而不是 View ,因此有时图案会错位。

对于几个区域,我使用了NSDrawThreePartImage,它可以正确平铺图像而不扭曲图像。即使我没有 3 张图像,我也只是将同一张图像放入 3 次。

关于objective-c - Mac 应用程序 - NSImage drawInRect 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13599656/

相关文章:

ios - 在通用 iOS 应用程序中使用 Storyboard 的 UISplitView

ios - 确定必要变量类型的设计模式

xcode - 如何将新值附加到解析数据库中已有的值?

objective-c - 带参数的完成 block

iphone - 如何从 SKSpriteNode 或 SKTexture 获取像素颜色?

ios - 自 iOS 13 以来,UITabBar 图标未垂直对齐

iphone - iOS 6 中 View Controller 的错误旋转

objective-c - KVC 与 NSArrays 的 NSArrays

cocoa - 从 NSBrowser 中删除边框

objective-c - 从内部 block 中调用 block