YYKit源码学习笔记第二篇
正文
这是Example工程中Image的第二个展示项
效果
关于baseline、progressive、interlaced的区别可以参考这三篇:
// 响应各控件事件的方法
- (void)changed {
NSString *name = nil;
if (_seg0.selectedSegmentIndex == 0) {
if (_seg1.selectedSegmentIndex == 0) {
name = @"mew_baseline.jpg";
} else if (_seg1.selectedSegmentIndex == 1) {
name = @"mew_baseline.png";
} else {
name = @"mew_baseline.gif";
}
} else {
if (_seg1.selectedSegmentIndex == 0) {
name = @"mew_progressive.jpg";
} else if (_seg1.selectedSegmentIndex == 1) {
name = @"mew_interlaced.png";
} else {
name = @"mew_interlaced.gif";
}
}
NSData *data = [NSData dataNamed:name];
float progress = _slider0.value;
if (progress > 1) progress = 1;
NSData *subData = [data subdataWithRange:NSMakeRange(0, data.length * progress)]; // 根据进度截取数据
YYImageDecoder *decoder = [[YYImageDecoder alloc] initWithScale:[UIScreen mainScreen].scale];
[decoder updateData:subData final:NO];
YYImageFrame *frame = [decoder frameAtIndex:0 decodeForDisplay:YES];
// 根据slider1的值对图片进行相应的模糊处理
UIImage *image = [frame.image imageByBlurRadius:_slider1.value tintColor:nil tintMode:0 saturation:1 maskImage:nil];
_imageView.image = image;
}
感悟
1. 虽然图片数据不完整,但我们仍可以呈现。
2. 不完整图片的呈现形式在这里有两种,baseline形式与progressive/interlaced形式。
3. 这个部分让我感悟最深的是ibireme的跨领域学习,在这里,他表现出对图片渲染的专业认识--可以从他的博客发现,他也擅长设计,这大概也是他被称为大神的原因之一。
4. 跨学科学习,有益无害。