iPhoneで画像を回転させています。フルサイズのグレースケール画像です (4s では 3264 x 2448)。私の測定では、OpenGl はコア グラフィックスの約 2 倍の速さで、2.6 秒に対して約 1.22 秒実行されているようです。しかし、これは私のニーズには十分な速度ではありません。可能であれば、1秒未満の回転が必要です。(そうでない場合は、画像のサブセクションを回転させることを含むプラン B に進みます。これはおそらくよりエレガントですが、独自の問題があります。)
これは表示目的ではなく、画像の内部処理のためだけであることを明確にする必要があります。
これを正しく行っており、明らかな初心者の間違いを犯していないことを確認したいと思います。これがコードです。可能であれば、改善のためのヒントをいただければ幸いです。
ありがとう、ケン
void LTT_RotateGL(
unsigned char *src,
unsigned char *dst,
int nHeight,
int nWidth,
int nRowBytes,
double radians,
unsigned char borderColor)
{
unsigned char *tmpSrc = (unsigned char *)malloc( (nWidth * nHeight) );
memcpy( tmpSrc, src, (nWidth * nHeight) );
CGContextRef context2 = CGBitmapContextCreate(
tmpSrc, nWidth, nHeight, (size_t)8, nRowBytes,
CGColorSpaceCreateDeviceGray(),
kCGImageAlphaNone );
CGImageRef imageRef2 = CGBitmapContextCreateImage( context2 );
UIImage *image2 = [[UIImage alloc] initWithCGImage:imageRef2];
GLuint width = CGImageGetWidth(image2.CGImage);
GLuint height = CGImageGetHeight(image2.CGImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
void *imageData = malloc( height * width);
CGContextRef context = CGBitmapContextCreate( imageData, width, height, 8, width, colorSpace, kCGImageAlphaNone );
CGColorSpaceRelease( colorSpace );
CGContextTranslateCTM( context, 0, height - height );
CGContextRotateCTM(context, -radians);
CGContextDrawImage( context, CGRectMake( 0, 0, width, height ), image2.CGImage );
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, width, height, 0, GL_LUMINANCE, GL_LUMINANCE, imageData);
CGContextRelease(context);
memcpy( dst, imageData, (nWidth * nHeight) );
free( tmpSrc );
}