iPhone中对UIImage对象处理的常用方法

来源:互联网 发布:朗威dislab软件下载 编辑:程序博客网 时间:2024/04/28 15:06

(一)根据给定得图片,从其指定区域截取一张新得图片

 

-(UIImage *)getImageFromImage{

//bigImage

//myImageRect,截图的区域

CGRect myImageRect = CGRectMake(10.0, 10.0, 57.0, 57.0);

UIImage* bigImage= [UIImage imageNamed:@"k00030.jpg"];

CGImageRef imageRef = bigImage.CGImage;

CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, myImageRect);

CGSize size;

size.width = 57.0;

size.height = 57.0;

UIGraphicsBeginImageContext(size);

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextDrawImage(context, myImageRect, subImageRef);

UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];

UIGraphicsEndImageContext();

return smallImage;

}

(二)针对UIImage得一些常用缩放得方法:

-(UIImage*)resizedImage1:(UIImage*)inImage  inRect:(CGRect)thumbRect {

// Creates a bitmap-based graphics context and makes it the current context.

UIGraphicsBeginImageContext(thumbRect.size);

[inImage drawInRect:thumbRect];

return UIGraphicsGetImageFromCurrentImageContext();

}

-(UIImage*)resizedImage2:(UIImage*)inImage  inRect:(CGRect)thumbRect {

 

CGImageRef          imageRef = [inImage CGImage];

CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);

// There's a wierdness with kCGImageAlphaNone and CGBitmapContextCreate

// see Supported Pixel Formats in the Quartz 2D Programming Guide

// Creating a Bitmap Graphics Context section

// only RGB 8 bit images with alpha of kCGImageAlphaNoneSkipFirst, kCGImageAlphaNoneSkipLast, kCGImageAlphaPremultipliedFirst,

 

// and kCGImageAlphaPremultipliedLast, with a few other oddball image kinds are supported

 

// The images on input here are likely to be png or jpeg files

 

if (alphaInfo == kCGImageAlphaNone)

alphaInfo = kCGImageAlphaNoneSkipLast;

// Build a bitmap context that's the size of the thumbRect

CGFloat bytesPerRow;

if( thumbRect.size.width > thumbRect.size.height ) {

bytesPerRow = 4 * thumbRect.size.width;

} else {

bytesPerRow = 4 * thumbRect.size.height;

}

CGContextRef bitmap = CGBitmapContextCreate(

NULL,

thumbRect.size.width,       // width

thumbRect.size.height,      // height

8, //CGImageGetBitsPerComponent(imageRef),  // really needs to always be 8

bytesPerRow, //4 * thumbRect.size.width,    // rowbytes

CGImageGetColorSpace(imageRef),

alphaInfo

);

// Draw into the context, this scales the image

CGContextDrawImage(bitmap, thumbRect, imageRef);

// Get an image from the context and a UIImage

CGImageRef  ref = CGBitmapContextCreateImage(bitmap);

UIImage*    result = [UIImage imageWithCGImage:ref];

CGContextRelease(bitmap);   // ok if NULL

CGImageRelease(ref);

return result;

}

 

- (UIImage *)scaleImage:(UIImage *) image maxWidth:(float) maxWidth maxHeight:(float) maxHeight

{

CGImageRef imgRef = image.CGImage;

CGFloat width = CGImageGetWidth(imgRef);

CGFloat height = CGImageGetHeight(imgRef);

if (width <= maxWidth && height <= maxHeight)

{

return image;

}

CGAffineTransform transform = CGAffineTransformIdentity;

CGRect bounds = CGRectMake(0, 0, width, height);

if (width > maxWidth || height > maxHeight)

{

CGFloat ratio = width/height;

if (ratio > 1)

{

bounds.size.width = maxWidth;

bounds.size.height = bounds.size.width / ratio;

}

else

{

bounds.size.height = maxHeight;

bounds.size.width = bounds.size.height * ratio;

}

}

CGFloat scaleRatio = bounds.size.width / width;

UIGraphicsBeginImageContext(bounds.size);

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextScaleCTM(context, scaleRatio, -scaleRatio);

CGContextTranslateCTM(context, 0, -height);

CGContextConcatCTM(context, transform);

CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);

UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return imageCopy;

}

原创粉丝点击