Бих искал да завъртя 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, ще оценя или код, или указател към мястото, от което да започна.