动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView
2014-10-04 22:17
453 查看
动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView
效果如下:
BlackAndWhiteView.h 与 BlackAndWhiteView.m
使用的源码:
效果如下:
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
相关文章推荐
- jQuery图片黑白开关插件BlackAndWhite
- 彩色照片转换为黑白照片(Color image converted to black and white picture)
- Swift - 集成app启动页广告,切换rootViewController,支持LaunchImage和LaunchScreen.storyboard,支持GIF图片显示,支持视图过渡动画
- [多媒体、图形、动画] UIImageView实现图片幻灯片
- HDU 3911 Black And White 2011 Multi-University Training Contest 8 - Host by HUST 线段树应用
- C# 图片处理之:彩色图片转为黑白图[转]
- Asp.net(C#)-彩色图片转化为黑白
- 鼠标感应彩色图片变黑白的css+js
- poj 3364 Black and white painting
- hdu 3911 Black And White
- hdu 3911 Black And White
- soj 3185: Black and white 最小割
- 鼠标感应彩色图片变黑白的css+js
- HDU 3911 Black And White
- iPhone UITableView异步加载图片 (动态加载图片)
- HDU 3911 Black And White
- Flash制作彩色线条动态图案生长动画
- C# 图片处理之:彩色图片转为黑白图
- VB彩色BMP图片转换为黑白图片
- hdu 3911 Black And White 一串0 1的数字 操作将一段区间[ i , j ]的每个数字进行异或操作 问区间最长0|1串