首页 > 代码库 > 动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView
动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView
动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView
效果如下:
BlackAndWhiteView.h 与 BlackAndWhiteView.m
//// BlackAndWhiteView.h// BlackAndWhiteView//// Created by YouXianMing on 14-10-4.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <UIKit/UIKit.h>@interface BlackAndWhiteView : UIView@property (nonatomic) float blackAlpha;@property (nonatomic, strong) UIImage *image;- (void)startImageProcessing;@end
//// BlackAndWhiteView.m// BlackAndWhiteView//// Created by YouXianMing on 14-10-4.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "BlackAndWhiteView.h"@interface BlackAndWhiteView ()@property (nonatomic, strong) UIImageView *normalView;@property (nonatomic, strong) UIImageView *blackView;@property (nonatomic, strong) UIImage *blackImage;@end@implementation BlackAndWhiteView- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { _normalView = [[UIImageView alloc] initWithFrame:self.bounds]; _blackView = [[UIImageView alloc] initWithFrame:self.bounds]; _blackView.alpha = 0.f; [self addSubview:_normalView]; [self addSubview:_blackView]; } return self;}- (void)startImageProcessing{ if (_image) { _normalView.image = _image; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ if (_blackImage == nil) { _blackImage = [self grayScale:_image]; } dispatch_async(dispatch_get_main_queue(), ^{ _blackView.image = _blackImage; }); }); }}#pragma mark - 私有方法- (UIImage *)grayScale:(UIImage *)inputImage{ int width = inputImage.size.width; int height = inputImage.size.height; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGContextRef context = CGBitmapContextCreate(nil, width, height, 8, // bits per component 0, colorSpace, kCGBitmapByteOrderDefault); CGColorSpaceRelease(colorSpace); if (context == NULL) { return nil; } CGContextDrawImage(context, CGRectMake(0, 0, width, height), inputImage.CGImage); CGImageRef image = CGBitmapContextCreateImage(context); UIImage *grayImage = [UIImage imageWithCGImage:image]; CFRelease(image); CGContextRelease(context); return grayImage;}#pragma mark - 重写setter方法@synthesize blackAlpha = _blackAlpha;- (void)setBlackAlpha:(float)blackAlpha{ _blackAlpha = blackAlpha; _blackView.alpha = blackAlpha;}- (float)blackAlpha{ return _blackAlpha;}@end
使用的源码:
//// ViewController.m// BlackAndWhiteView//// Created by YouXianMing on 14-10-4.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "BlackAndWhiteView.h"@interface ViewController ()@property (nonatomic, strong) BlackAndWhiteView *blackView;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; UIImage *image = [UIImage imageNamed:@"red.jpg"]; _blackView = [[BlackAndWhiteView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; _blackView.image = image; _blackView.center = self.view.center; [_blackView startImageProcessing]; [self.view addSubview:_blackView]; [self performSelector:@selector(run) withObject:nil afterDelay:8];}- (void)run{ [UIView animateWithDuration:2 animations:^{ _blackView.blackAlpha = 1.f; }];}@end
动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。