动态将彩色图片动画过渡到黑白图片的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
时间: 2024-08-04 03:47:06

动态将彩色图片动画过渡到黑白图片的BlackAndWhiteView的相关文章

win8系统使用光影魔术手软件将彩色图片变为黑白图片的方法

  win8系统使用光影魔术手软件将彩色图片变为黑白图片的方法 具体方法如下: 1.下载安装好光影魔术手软件后,用光影魔术手程序打开要将彩色变黑白的图片; 2.左键选择光影魔术手程序窗口右上角的"数码暗房"功能按钮,打开数码暗房的效果选项; 3.鼠标左键按光影魔术手程序窗口右侧的滑杆,往下拉动滑杆找到"黑白效果"选项; 4.左键"黑白效果"选项,程序窗口中的彩色图片瞬间变成了黑白图片,然后左键窗口右侧的"确定"; 5.左键程序

8个实用炫酷的HTML5图片动画应用

近期我们发布了不少关于HTML5和jQuery的图片动画应用,很多都比较实用,也有一些效果非常炫酷,比如一些HTML5 3D图片动画特效.本文精选了8个实用而且炫酷的HTML5图片动画应用,希望你会喜欢. 1.CSS3/jQuery实现移动端滑动图片层叠效果 这是一款基于jQuery和CSS3的图片层叠插件,这和我们之前介绍的CSS3图片层叠展开特效有点不同,它支持鼠标滑动切换图片,同时如果在移动端运行的话,也支持触屏滑动来切换图片.这款jQuery图片应用非常适合在手机上使用,效果还不错. 在

PHP如何判断一个gif图片是否为动态图片(动画)

如何使用PHP来判断一个gif图片是否为动态图片(动画)?首先想到的是使用getimagesize()函数来看type值,发现都是gif,所以这个办法是不可行的.下面是作者在网上看到的一个函数,用来判断gif是否为动图的.贴出来和大家分享. /* * 判断图片是否为动态图片(动画) */ function isAnimatedGif($filename) { $fp=fopen($filename,'rb'); $filecontent=fread($fp,filesize($filename)

AS3.0 图片变黑白 图片彩色变黑白代码

AS3.0 图片变黑白 图片彩色变黑白代码 复制代码代码如下:import flash.filters.ColorMatrixFilter;//导入色彩滤镜 var matrix:Array = [ 0.5,0.5,0.082,0,0,0.5,0.5,0.082,0,0,0.5,0.5,0.082,0,0,0,0,0,1,0 ];//定义色彩数组 var colorMat:ColorMatrixFilter = new ColorMatrixFilter(matrix);//创建滤镜对象 //添

Core Animation一些Demo总结 (动态切换图片、大转盘、图片折叠、进度条等动画效果)_Android

前一篇总结了Core Animation的一些基础知识,这一篇主要是Core Animation 的一些应用,涉及到CAShapeLayer.CAReplicatorLayer等图层的知识. 先看效果图: 1.切换图片: 2.彩票转盘 3.图片折叠 4.进度条旋转 5.粒子效果 一.切换图片 看起来很复杂的动画,通过少量的计算和编码就可以简单的实现.要做到这一步,必须是需要研究iOS开发中的Core Animation和Core Graphics框架的.日常工作中,对于很多东西不求甚解,只是拿过

使彩色图片就为黑白图片

使彩色图片就为黑白图片 => 使彩色图片就为黑白图片,再现一幅古朴.恬淡的美,这也不难做到, CSS样式表单滤镜Gray的强大功能,可以轻松实现十分优秀的效果!     以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索css 彩色图片变黑白.把彩色图片变成黑白.ps彩色图片变黑白.彩色图片转黑白.将彩色图片变成黑白,以便于您获取更多的相关知识.

[Silverlight]使用WritableBitmap将图片处理成为黑白图片

原文 http://www.dotblogs.com.tw/junegoat/archive/2010/10/02/silverlight-black-and-white.aspx 之前遇到我们家设计一个小要求... 他需要一个转把图片转黑白的特效... 在Silverlight 中要如何做到呢?! 下面是小范例... 先介绍一下配置.. 点击按钮后可以将imgSource 的图案转成黑白后放入imgTarget中.. XAML Code: < UserControl x:Class ="

Android自定义view利用Xfermode实现动态文字加载动画

对于Xfermode 可能很多人看了一些就放弃了,今天我就个人理解,举简单的我们生活中的例子,让大家更容易理解这是个什么东西.其实并不是你们想象的那么难,你只要懂三步就够了.先来看一看这次的效果图,这个gif大家凑合看. 不要把Xfermode 想的这么难,我把Xfermode 理解成中学时 学的"集合" ,我们知道"集合"是处理 数据的.例如: 集合 A={1,2,3,4},集合B={3,4,5,6}.这两个集合 有三个属性,交集,并集,补集. 那么 Xfermo

Photoshop照片教程:质感肤色的黑白图片

导言: 黑白图片不是简单的去色处理,重点要把肤色的质感渲染出来.方法有很多,最常用的是把图片稍微调暗,肤色的高光部分用减淡或调色工具加亮.另外可以用滤镜等增加一些纹理等,可更好的加强肤色质感. 原图案 素材 最终效果图 图00 1.打开原片,养成良好习惯,复制一个图层. 图01 2.当时自己用85定焦拍摄,构图不是很严谨.首先对图片进行了剪裁. 图02 3.新建一个黑白调整层,具体可以调节参数.在这里调节了黄色通道的明度,因为原图是黄色眼影,但是感觉做成黑白以后,黄色眼影比较突出,所以现在把黄色