Я хотел бы повернуть 2D-изображение (в плоскости x/y) в реальном времени или почти в реальном времени (достаточно 10 кадров в секунду). Возникает вопрос, насколько большое изображение я могу вращать с такой скоростью. Причина, по которой я не могу просто провести эксперимент сам, заключается в том, что я не могу быть уверен, что делаю это правильно. Я не уверен, получу ли я полную скорость с помощью CATransform3DRotate, CGAffineTransformMakeRotation или мне придется перейти на OpenGL.
Могу поспорить, что аппаратное обеспечение предназначено для поворота изображений размера экрана (или меньше), а не полного разрешения (3226 на 2448) изображений. К сожалению, нам приходится работать с изображениями размером больше экрана, а иногда и размером с весь сенсор. Я реализовал вращение с помощью CGAffineTransformMakeRotation, и если это все, что нужно, я могу начать с малого и наращивать — не так ли?
UIImage * ImageRotatedByRadians(UIImage *oldImage, CGFloat radians)
{
NSLog( @"\n\nRotateImage->imageRotatedByRadians: (%f)\n\n", radians );
// Calculate the size of the rotated view's containing box for our drawing space.
UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake( 0, 0, oldImage.size.width, oldImage.size.height )];
CGAffineTransform t = CGAffineTransformMakeRotation( radians );
rotatedViewBox.transform = t;
CGSize rotatedSize = rotatedViewBox.frame.size;
// Create the bitmap context.
UIGraphicsBeginImageContext( rotatedSize );
CGContextRef bitmap = UIGraphicsGetCurrentContext();
// Move the origin to the middle of the image so we will rotate and scale around the center.
CGContextTranslateCTM( bitmap, rotatedSize.width / 2, rotatedSize.height / 2 );
// Rotate the image context.
CGContextRotateCTM( bitmap, radians );
// Now, draw the rotated/scaled image into the context.
CGContextScaleCTM( bitmap, 1.0, -1.0 );
CGContextDrawImage( bitmap, CGRectMake( -oldImage.size.width / 2, -oldImage.size.height / 2, oldImage.size.width, oldImage.size.height), [oldImage CGImage] );
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
//UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);
UIGraphicsEndImageContext();
return newImage;
}
Вопросы: Какой самый быстрый механизм 2D-поворота на iPhone 5 и более поздних версиях?
Какова наибольшая область изображения, которую можно вращать со скоростью не менее 10 кадров в секунду?
Мы работаем с 256 изображениями в градациях серого (я думаю, это должно ускорить процесс).
Если ответ OpenGL, я был бы признателен за код или указатель на место для начала.