Зеркалирование CIImage/NSImage

В настоящее время у меня есть следующее

 CIImage *img = [CIImage imageWithCVImageBuffer: imageBuffer];

 NSCIImageRep *imageRep = [NSCIImageRep imageRepWithCIImage:img];
 NSImage *image = [[[NSImage alloc] initWithSize: [imageRep size]] autorelease];
 [image addRepresentation:imageRep];

Это работает отлично, я могу использовать NSImage, и при записи в файл изображение именно такое, какое мне нужно.

Однако я извлекаю это изображение из пользовательского iSight с помощью QTKit, поэтому мне нужно иметь возможность перевернуть это изображение по оси Y.

Моя первая мысль состояла в том, чтобы преобразовать CIImage, используя что-то вроде этого, однако мое окончательное изображение всегда получается совершенно пустым. При записи в файл размеры правильные, но он кажется пустым.

- (CIImage *)flipImage:(CIImage *)image
{
    return [image imageByApplyingTransform:CGAffineTransformMakeScale(-1, 1)];
}

Я подхожу к этому неправильно? Или я ошибся в своем коде?


person Brandon Schlenker    schedule 25.05.2011    source источник


Ответы (2)


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

person Jonathan Grynspan    schedule 25.05.2011

Вот код, который может кому-то помочь ==>

    CGAffineTransform rotTrans = CGAffineTransformMakeRotation(M_PI_2);
    CGAffineTransform transTrans1 = CGAffineTransformTranslate(rotTrans, 0.0f, 320.0f);
    CGAffineTransform scaleTrans = CGAffineTransformScale(transTrans1, 1.0, -1.0);
    CGAffineTransform transTrans2 = CGAffineTransformTranslate(scaleTrans, -0.0f, -320.0f);

    self.view.transform = transTrans2;

Я использую его, чтобы переворачивать кадры с фронтальной камеры по горизонтали, чтобы они всегда отображались вверх независимо от поворота устройства. Этот материал становится довольно сложным. Чтобы понять, что происходит, нужно уменьшить масштаб по любой из осей и посмотреть, каков результат.

person Adam Freeman    schedule 30.03.2013
comment
нет такой вещи, как NSView.transform. Эта строка является кодом ios, а self, вероятно, является UIViewController, но это не имеет ничего общего с NSImage. - person Radu Simionescu; 08.05.2014