NSButtonCell中的圆角nimage



我有一个NSMatrix与一对nsbutton在它没有文本,但只有图像。其中一张图片是从网上下载的,我想在我的OS X应用程序中有圆角。

我找到了一个答案,这几乎是我正在寻找的:如何绘制一个圆形的NSImage,但遗憾的是,当我使用它时,它的行为很疯狂:

// In my NSButtonCell subclass
- (void)drawImage:(NSImage*)image withFrame:(NSRect)imageFrame inView:(NSView*)controlView
{
    // [super drawImage:image withFrame:imageFrame inView:controlView];
    [NSGraphicsContext saveGraphicsState];
    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:imageFrame xRadius:5 yRadius:5];
    [path addClip];
    [image drawInRect:imageFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
    [NSGraphicsContext restoreGraphicsState];
}

问题是,如果图像是部分透明的(PNG),那么它完全被破坏了,我只看到黑色背景上的几个白色像素。

如果图像不是透明的,那么它会得到圆角,但会旋转180°,我不知道为什么。

有什么建议吗?

您需要确保在绘制图像之前正确设置图像的大小,并且您应该使用NSImage方法drawInRect:fromRect:operation:fraction:respectFlipped:hints:来确保图像以正确的方式绘制:

- (void)drawImage:(NSImage*)image withFrame:(NSRect)imageFrame inView:(NSView*)controlView
{
    // [super drawImage:image withFrame:imageFrame inView:controlView];
    [NSGraphicsContext saveGraphicsState];
    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:imageFrame xRadius:5 yRadius:5];
    [path addClip];
    //set the size
    [image setSize:imageFrame.size];
    //draw the image
    [image drawInRect:imageFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil];
    [NSGraphicsContext restoreGraphicsState];
}

如果你这样做,图像应该画正确,即使它是一个半透明的PNG图像。

相关内容

  • 没有找到相关文章

最新更新