当绘制到宽度大于2000px的NSRect时,NSImage会被平铺

时间:2014-07-10 09:01:10

标签: objective-c cocoa nsimage

我试图在NSOpenGLView上叠加图像。除非视图拉伸超过2000px的宽度,否则一切正常。这是我如何将它应用于NSOpenGLView。请记住,我本质上是插入另一个应用程序,所以这个功能是一种黑客攻击。

- (void)applyOverlay {
    NSWindow* mainWindow = [[NSApplication sharedApplication]mainWindow];
    NSArray* subViews = [[mainWindow contentView] subviews];
    NSOpenGLView* openGLView = subViews[0];
    Overlay* overlay = [[VRayOverlay alloc] initWithFrame:[openGLView frame]];
    [openGLView setAutoresizesSubviews:YES];
    [openGLView addSubview:overlay];
}

我的叠加层看起来像这样

@implementation Overlay

- (id)initWithFrame:(NSRect)rect
{
    self = [super initWithFrame:rect];
    if (self) {
        self->image = [[NSImage alloc] initByReferencingFile:@"/my_path/scribbles.png"];
        [self setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
    }
    return self;
}

- (void)drawRect:(NSRect)dirtyRect
{
    [super drawRect:dirtyRect];
    [self->image drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeCopy fraction:0.5];
}

@end

这是宽度低于2000px时的结果 Over 2000 这是宽度超过2000px时的结果。另外,请注意右侧的最后一个图块被拉伸以适合视图框。 under 2000

这是一个错误还是我做错了什么?我尝试过不同尺寸的不同图像,效果似乎相同。

0 个答案:

没有答案