CGImageRef没有正确初始化/分配

时间:2015-12-13 03:58:13

标签: objective-c nsimage cgimageref

我目前遇到CGImageRef的问题。

每当我创建CGImageRef并在调试器视图中查看它时,在Xcode中,它是nil

以下是代码:

-(void)mouseMoved:(NSEvent *)theEvent{
    if (self.shoulddrag) {
        NSPoint event_location = [theEvent locationInWindow];//direct from the docs
        NSPoint local_point = [self convertPoint:event_location fromView:nil];//direct from the docs

        CGImageRef theImage = (__bridge CGImageRef)(self.image);
        CGImageRef theClippedImage = CGImageCreateWithImageInRect(theImage, CGRectMake(local_point.x,local_point.y,1,1));

        NSImage * image = [[NSImage alloc] initWithCGImage:theClippedImage     size:NSZeroSize];

        self.pixleView.image = image;
        CGImageRelease(theClippedImage);
    }
}

其他一切似乎都在起作用。我无法理解。任何帮助将不胜感激。

注意:self.pixelView是一个NSImageView实例,未以任何方式覆盖。

2 个答案:

答案 0 :(得分:0)

很可能local_point不在图像内部。您已将点从窗口转换为视图坐标,但这可能与图像坐标不同。测试一下,看看图片的左下角是否会local_point(0,0)

目前还不清楚你的观点是如何布局的,但我怀疑你想要做的是减去用户与self相互作用的任何区域(可能是子视图)的来源。

答案 1 :(得分:0)

好吧,我明白了。


我用来创建CGImageRef的是:

    CGImageRef theImage = (__bridge CGImageRef)(self.image);

显然我应该使用的是:

    CGImageSourceRef theImage = CGImageSourceCreateWithData((CFDataRef)[self.image TIFFRepresentation], NULL);

我想我的问题是因为某种原因我认为NSImageCGImageRef有免费的桥接。

显然,我错了。