圖像處理的代碼片段(抓圖、倒影、圓角)

轉載自:http://www.189works.com/article-41036-1.html

1、捕捉屏幕截圖

      CALayer實例使用Core GraphicsrenderInContext方法可以將視圖繪製到圖像上下文中以便轉化爲其他UIImage實例。

      引用頭文件:#import<#import QuartzCore/QuartzCore.h>

+ (UIImage *)imageFromView:(UIView *)theView {
    // draw a view's contents into an image context
    UIGraphicsBeginImageContext(theView.frame.size);
    CGContextRef  context = UIGraphicsGetCurrentContext();
    
    [theView.layer  renderInContext:context];
    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
 
    return theImage;
}
注:UIGraphicsBeginImageContext(CGSize size)創建一個基於位圖的上下文(context),並將其設置爲當前上下文。函數功能與UIGraphicsBeginImageContextWithOptions相同,相當於該方法的opaque參數爲NO,scale因子爲1.0。而UIGraphicsEndImageContext()方法是移除棧頂的基於當前位圖的圖形上下文。

2、視圖添加倒影效果

const CGFloat kReflectPercent = -0.25f;
const CGFloat kReflectOpacity = 0.3f;
const CGFloat kReflectDistance = 10.0f;

+ (void)addSimpleReflectionToView:(UIView *)theView
{
     CALayer *reflectionLayer = [CALayer layer];
     reflectionLayer.contents = [theView layer].contents;
     reflectionLayer.opacity = kReflectOpacity;
     reflectionLayer.frame = CGRectMake(0.0f,0.0f,theView.frame.size.width,theView.frame.size.height*kReflectPercent);  //倒影層框架設置,其中高度是原視圖的百分比
    CATransform3D stransform = CATransform3DMakeScale(1.0f,-1.0f,1.0f);
     CATransform3D transform = CATransform3DTranslate(stransform,0.0f,-(kReflectDistance + theView.frame.size.height),0.0f);
     reflectionLayer.transform = transform;
     reflectionLayer.sublayerTransform = reflectionLayer.transform;
     [[theView layer] addSublayer:reflectionLayer];
}
另一:使用Core Graphics創建倒影

+ (CGImageRef) createGradientImage:(CGSize)size
{
      CGFloat colors[] = {0.0,1.0,1.0,1.0};
      //在灰色設備色彩上建立一漸變
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
      CGContextRef context = CGBitmapContextCreate(nil,size.width,size.height,8,0,colorSpace,kCGImageAlphaNone);
      CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace,colors,NULL,2);
      CGColorSpaceRelease(colorSpace);

      //繪製線性漸變
     CGPoint p1 = CGPointZero;
      CGPoint p2 = CGPointMake(0,size.height);
      CGContextDrawLinearGradient(context,gradient,p1,p2,kCGGradientDrawsAfterEndLocation);

      //Return the CGImage
      CGImageRef theCGImage = CGBitmapContextCreateImage(context);
      CFRelease(gradient);
      CGContextRelease(context);
      return theCGImage;
}
創建一個縮小的倒影

+ (UIImage *) reflectionOfView:(UIView *)theView WithPercent:(CGFloat) percent
{
     //Retain the width but shrink the height
     CGSize size = CGSizeMake(theView.frame.size.width, theView.frame.size.height * percent);

     //Shrink the View
     UIGraphicsBeginImageContext(size);
     CGContextRef context = UIGraphicsGetCurrentContext();
     [theView.layer renderInContext:context];
     UIImage *partialimg = UIGraphicsGetImageFromCurrentImageContext();
     UIGraphicsEndImageContext();

     //build the mask
     CGImageRef mask = [ImageHelper createGradientImage:size];
     CGImageRef ref = CGImageCreateWithMask(partialimg.CGImage,mask);
     UIImage *theImage = [UIImage imageWithCGImage:ref];
     CGImageRelease(ref);
     CGImageRelease(mask);
     return theImage;
}

const CGFloat kReflectDistance = 10.0f;
+ (void) addReflectionToView: (UIView *)theView
{
     theView.clipsToBounds = NO;
     UIImageView *reflection = [[UIImageView alloc] initWithImage:[ImageHelper reflectionOfView:theView withPercent:0.45f]];
     CGRect frame = reflection.frame;
     frame.origin = CGPointMake(0.0f, theView.frame.size.height + kReflectDistance);
     reflection.frame = frame;

     // add the reflection as a simple subview
     [theView addSubView:reflection];
     [reflection release];
}
3、實現圓角圖片:

UIColor *color = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:0];
[aImage setBackgroundColor:color]; //設置背景透明

/******設置圖片圓角begin*******/
aImage.layer.masksToBounds = YES;
aImage.layer.cornerRadius = 5.0;
aImage.layer.borderWidth = 0.5;
aImage.layer.borderColor = [[UIColor grayColor] CGColor];
/******設置圖片圓角end********/
另有方法可見:http://www.4ucode.com/Study/Topic/2058289轉載文章。

4、實現iPhone圖標的水晶立體效果

- (void)viewDidLoad {
    [super viewDidLoad];
    UIGraphicsBeginImageContext(icon.bounds.size);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    const CGFloat components[4] = {0.0,0.4,0.0,1.0};
    CGContextSetFillColor(ctx, components);
    CGContextFillRect(ctx, CGRectMake(0, 0, icon.bounds.size.width, icon.bounds.size.height));
    UIImage *background = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImage *image = [UIImage imageNamed:@"icon.png"];
    UIImage *mask = [UIImage imageNamed:@"IconBase.png"];
    UIImage *roundCorner = [UIImage imageNamed:@"round-corner.png"];
    icon.image = image;
    CALayer* subLayer = [[CALayer layer] retain];
    subLayer.frame = icon.bounds;
    subLayer.contents = (id)[background CGImage];
    CALayer* maskLayer = [[CALayer layer] retain];
    maskLayer.frame = icon.bounds;
    maskLayer.contents = (id)[mask CGImage]; 
    [subLayer setMask:maskLayer];
    [[icon layer] addSublayer:subLayer];
    CALayer* roundCornerLayer = [[CALayer layer] retain];
    roundCornerLayer.frame = icon.bounds;
    roundCornerLayer.contents = (id)[roundCorner CGImage];
    [[icon layer] setMask:roundCornerLayer];
    [maskLayer release];
    [subLayer release];
    [roundCornerLayer release];
}


發佈了22 篇原創文章 · 獲贊 5 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章