iphone iPhone开发应用UIImage图片对象操作

1原文摘自:http://mobile.51cto.com/iphone-284346.htm

iPhone开发应用UIImage图片对象操作是本文要介绍的内容,主要来学习UIImage图片对象操作,内容不多,主要是以代码实现图片对象的操作。

1、根据给定得图片,从其指定区域截取一张新得图片。

  1. -(UIImage *)getImageFromImage{   
  2.     //大图bigImage   
  3.     //定义myImageRect,截图的区域   
  4.     CGRect myImageRect = CGRectMake(10.0, 10.0, 57.0, 57.0);   
  5.     UIImage* bigImage= [UIImage imageNamed:@"k00030.jpg"];   
  6.     CGImageRef imageRef = bigImage.CGImage;   
  7.     CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, myImageRect);   
  8.     CGSize size;   
  9.     size.width = 57.0;   
  10.     size.height = 57.0;   
  11.     UIGraphicsBeginImageContext(size);   
  12.     CGContextRef context = UIGraphicsGetCurrentContext();   
  13.     CGContextDrawImage(context, myImageRect, subImageRef);   
  14.     UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];   
  15.     UIGraphicsEndImageContext();   
  16.     return smallImage;   

2、针对UIImage得一些常用缩放得方法:

  1. -(UIImage*)resizedImage1:(UIImage*)inImage  inRect:(CGRect)thumbRect {   
  2.     // Creates a bitmap-based graphics context and makes it the current context.   
  3.     UIGraphicsBeginImageContext(thumbRect.size);   
  4.     [inImage drawInRect:thumbRect];   
  5.     return UIGraphicsGetImageFromCurrentImageContext();   
  6. }   
  7. -(UIImage*)resizedImage2:(UIImage*)inImage  inRect:(CGRect)thumbRect {   
  8.     CGImageRef          imageRef = [inImage CGImage];   
  9.     CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);   
  10.     /* There's a wierdness with kCGImageAlphaNone and CGBitmapContextCreate   
  11.     see Supported Pixel Formats in the Quartz 2D Programming Guide   
  12.     Creating a Bitmap Graphics Context section   
  13.     only RGB 8 bit images with alpha of kCGImageAlphaNoneSkipFirst,         
  14. kCGImageAlphaNoneSkipLast, kCGImageAlphaPremultipliedFirst,and kCGImageAlphaPremultipliedLast, 
  15. with a few other oddball image kinds are supported   
  16. The images on input here are likely to be png or jpeg files*/   
  17.     if (alphaInfo == kCGImageAlphaNone)   
  18.         alphaInfo = kCGImageAlphaNoneSkipLast;   
  19.         // Build a bitmap context that's the size of the thumbRect   
  20.        CGFloat bytesPerRow;   
  21.     if( thumbRect.size.width > thumbRect.size.height ) {   
  22.        bytesPerRow = 4 * thumbRect.size.width;   
  23.     } else {   
  24.        bytesPerRow = 4 * thumbRect.size.height;   
  25.     }   
  26.     CGContextRef bitmap = CGBitmapContextCreate(NULL,   
  27.                                                         thumbRect.size.width,       // width   
  28.                                                         thumbRect.size.height,      // height   
  29.                                                         8, //CGImageGetBitsPerComponent(imageRef),  // really needs to always be 8   
  30.                                                         bytesPerRow, //4 * thumbRect.size.width,    // rowbytes   
  31.                                                         CGImageGetColorSpace(imageRef),   
  32.                                                         alphaInfo   
  33. );   
  34.     // Draw into the context, this scales the image   
  35.     CGContextDrawImage(bitmap, thumbRect, imageRef);   
  36.     // Get an image from the context and a UIImage   
  37.     CGImageRef  ref = CGBitmapContextCreateImage(bitmap);   
  38.     UIImage*    result = [UIImage imageWithCGImage:ref];   
  39.     CGContextRelease(bitmap);   // ok if NULL   
  40.     CGImageRelease(ref);   
  41.     return result;   
  42. }   
  43. - (UIImage *)scaleImage:(UIImage *) image maxWidth:(float) maxWidth maxHeight:(float) maxHeight   
  44. {   
  45.     CGImageRef imgRef = image.CGImage;   
  46.     CGFloat width = CGImageGetWidth(imgRef);   
  47.     CGFloat height = CGImageGetHeight(imgRef);   
  48.     if (width <= maxWidth && height <= maxHeight)   
  49.     {   
  50.         return image;   
  51.     }   
  52.     CGAffineTransform transform = CGAffineTransformIdentity;   
  53.     CGRect bounds = CGRectMake(0, 0, width, height);   
  54.     if (width > maxWidth || height > maxHeight)   
  55.     {   
  56.         CGFloat ratio = width/height;   
  57.         if (ratio > 1)   
  58.         {   
  59.             bounds.size.width = maxWidth;   
  60.             boundsbounds.size.height = bounds.size.width / ratio;   
  61.         }   
  62.         else   
  63.         {   
  64.             bounds.size.height = maxHeight;   
  65.              boundsbounds.size.width = bounds.size.height * ratio;   
  66.         }   
  67.     }   
  68.     CGFloat scaleRatio = bounds.size.width / width;   
  69.     UIGraphicsBeginImageContext(bounds.size);   
  70.     CGContextRef context = UIGraphicsGetCurrentContext();   
  71.     CGContextScaleCTM(context, scaleRatio, -scaleRatio);   
  72.     CGContextTranslateCTM(context, 0, -height);   
  73.     CGContextConcatCTM(context, transform);   
  74.     CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);   
  75.     UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();   
  76.     UIGraphicsEndImageContext();   
  77.     return imageCopy;   

3、其他缩放UIImage的size,有需要的可以看看

  1. -(UIImage*) scaleAndRotateImage:(UIImage*)photoimage:(CGFloat)bounds_width:(CGFloat)bounds_height   
  2. {   
  3.     //int kMaxResolution = 300;   
  4.     CGImageRef imgRef =photoimage.CGImage;   
  5.     CGFloat width = CGImageGetWidth(imgRef);   
  6.     CGFloat height = CGImageGetHeight(imgRef);   
  7.     CGAffineTransform transform = CGAffineTransformIdentity;   
  8.     CGRect bounds = CGRectMake(0, 0, width, height);   
  9.     /*if (width > kMaxResolution || height > kMaxResolution)   
  10.     {   
  11.         CGFloat ratio = width/height;   
  12.         if (ratio > 1)   
  13.         {   
  14.             bounds.size.width = kMaxResolution;   
  15.             boundsbounds.size.height = bounds.size.width / ratio;   
  16.         }   
  17.         else   
  18.         {   
  19.             bounds.size.height = kMaxResolution;   
  20.             boundsbounds.size.width = bounds.size.height * ratio;   
  21.         }   
  22.     }*/   
  23.     bounds.size.width = bounds_width;   
  24.     bounds.size.height = bounds_height;   
  25.     CGFloat scaleRatio = bounds.size.width / width;   
  26.     CGFloat scaleRatioheight = bounds.size.height / height;   
  27.     CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));   
  28.     CGFloat boundHeight;   
  29.     UIImageOrientation orient =photoimage.imageOrientation;   
  30.     switch(orient)   
  31.     {   
  32.         case UIImageOrientationUp: //EXIF = 1   
  33.             transform = CGAffineTransformIdentity;   
  34.             break;   
  35.         case UIImageOrientationUpMirrored: //EXIF = 2   
  36.             transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);   
  37.             transform = CGAffineTransformScale(transform, -1.0, 1.0);   
  38.             break;   
  39.         case UIImageOrientationDown: //EXIF = 3   
  40.             transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);   
  41.             transform = CGAffineTransformRotate(transform, M_PI);   
  42.             break;   
  43.         case UIImageOrientationDownMirrored: //EXIF = 4   
  44.             transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);   
  45.             transform = CGAffineTransformScale(transform, 1.0, -1.0);   
  46.             break;   
  47.         case UIImageOrientationLeftMirrored: //EXIF = 5   
  48.             boundHeight = bounds.size.height;   
  49.             boundsbounds.size.height = bounds.size.width;   
  50.             bounds.size.width = boundHeight;   
  51.             transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);   
  52.             transform = CGAffineTransformScale(transform, -1.0, 1.0);   
  53.             transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);   
  54.             break;   
  55.         case UIImageOrientationLeft: //EXIF = 6   
  56.             boundHeight = bounds.size.height;   
  57.             boundsbounds.size.height = bounds.size.width;   
  58.             bounds.size.width = boundHeight;   
  59.             transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);   
  60.             transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);   
  61.             break;   
  62.         case UIImageOrientationRightMirrored: //EXIF = 7   
  63.             boundHeight = bounds.size.height;   
  64.             boundsbounds.size.height = bounds.size.width;   
  65.             bounds.size.width = boundHeight;   
  66.             transform = CGAffineTransformMakeScale(-1.0, 1.0);   
  67.             transform = CGAffineTransformRotate(transform, M_PI / 2.0);   
  68.             break;   
  69.         case UIImageOrientationRight: //EXIF = 8   
  70.             boundHeight = bounds.size.height;   
  71.             boundsbounds.size.height = bounds.size.width;   
  72.             bounds.size.width = boundHeight;   
  73.             transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);   
  74.             transform = CGAffineTransformRotate(transform, M_PI / 2.0);   
  75.             break;   
  76.         default:   
  77.             [NSException raise:NSInternalInconsistencyException format:@"Invalid?image?orientation"];   
  78.             break;   
  79.     }   
  80.     UIGraphicsBeginImageContext(bounds.size);   
  81.     CGContextRef context = UIGraphicsGetCurrentContext();   
  82.     if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft)   
  83.     {   
  84.         CGContextScaleCTM(context, -scaleRatio, scaleRatioheight);   
  85.         CGContextTranslateCTM(context, -height, 0);   
  86.     }   
  87.     else   
  88.     {   
  89.         CGContextScaleCTM(context, scaleRatio, -scaleRatioheight);   
  90.         CGContextTranslateCTM(context, 0, -height);   
  91.     }   
  92.     CGContextConcatCTM(context, transform);   
  93.     CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);   
  94.     UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();   
  95.     UIGraphicsEndImageContext();   
  96.     return imageCopy;   

小结:iPhone开发应用UIImage图片对象操作的内容介绍完了,希望通过本文的学习能对你有所帮助!

 

posted on 2011-12-06 22:05  wtq  阅读(527)  评论(0编辑  收藏  举报