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, который никоим образом не был переопределен.


person Pro Blaster    schedule 13.12.2015    source источник


Ответы (2)


Скорее всего, local_point не находится внутри изображения. Вы преобразовали точку из окна в координаты вида, но это может не совпадать с координатами изображения. Проверьте это, чтобы увидеть, приводит ли нижний левый угол вашего изображения к local_point как (0,0).

Непонятно, как устроено ваше представление, но я подозреваю, что вы хотите вычесть происхождение любого региона (возможно, подпредставления), с которым взаимодействует пользователь, относительно self.

person Rob Napier    schedule 13.12.2015
comment
Да, я знал, что у меня проблема с local_point. Однако я уже пробовал использовать (0,0,1,1) вместо (local_point.x, local_point.y, 1, 1). И это все еще не сработало - person Pro Blaster; 13.12.2015

Хорошо, я понял это.


Для создания CGImageRef я использовал:

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

По-видимому, я должен был использовать:

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

Я предполагаю, что моя проблема заключалась в том, что по какой-то причине я думал, что у NSImage и CGImageRef есть бесплатный мост.

Видимо, я ошибся.

person Pro Blaster    schedule 27.12.2015