优化在iPhone上的2D灰度图像OpenGL的旋转(Optimizing OpenGl Rotat

2019-10-29 20:14发布

我旋转在iPhone上的图像。 它是(在4S 3264通过2448)全尺寸灰度图像。 OpenGL的似乎是大约快两倍,我的测量核心显卡,运行1.22秒钟而不是2.6秒。 但是,这不是我的需要速度不够快,我需要亚秒级的旋转,如果它是可能的。 (如果没有,我们去计划,该计划包括旋转图像,这也许是更优雅,但有它自己的问题的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 );
   }
文章来源: Optimizing OpenGl Rotation of a 2D grayscale image on iphone