UIImage的scale
2019独角兽企业重金招聘Python工程师标准>>>
iPhone OS4.0加入了scale factor,这表示point长度/pixel长度。
在分辨率为960*640的设备上,我们知道逻辑坐标系还是不变480*320,那么一个point有两个pixel长,所以scale=2.0。
在分辨率为480*320的设备商,point和pixel长度相同,scale=1.0。
为了程序自动适应分辨率,程序会自动给UIScreen.scale赋值,[UIScreen mainScreen].scale = 1.0 or 2.0。
我们编程,画图,窗口,字体等都是矢量图,通过scale能够让我们不管分辨率,按照逻辑坐标480*320来设计界面,效果在所有分辨率下都一致(物理尺寸位置一致)。但是和光栅相关的位图又如何适应呢?
比如一个32*32的图片,在高分辨率下,如果要位置大小都不变,那么32*32的图像点显示在64*64的像素(光栅)上。在不改程序的情况下,一个图像点的颜色对应4个颜色一致的像素点。这样图片不光模糊,而且还有锯齿。
所以,要需要一个64*64的新图片代替原图片。在不改程序代码的情况下如何实现?SDK要求我们再加一个图片,比如原图片是image.png,新加的就是image@2x.png,是64*64的。
在系统scale=2.0时,加载图像时先找@2x的,找不到在找原来的,所以就是只要给所有的图像资源文件都加上一个新的高清晰的@2x文件,程序就自动在高分辨屏幕上用高清晰图片,低分辨上用低清晰图像。
再来看看SDK是如何实现的。前提是程序代码没变,SDK内部实现变了。变了什么,主要就是UIImage新加了个scale。
按前面所讲的,读取image@2x.png时,scale=2.0,读取image.png时scale=1.0。
看同一张图片,有如下几个情况:
当UIScreen.scale=2.0时,读取image@2x.png,UIImage.scale=2.0 UIImage.size=16*16
当UIScreen.scale=1.0时,读取image.png, UIImage.scale=1.0 UIImage.size=32*32
当UIScreen.scale=2.0时,读取image.png, UIImage.scale=1.0 UIImage.size=32*32 (不存在@2x文件的时候)
看出来没有,图片的实际尺寸是size*scale。这里就可以给出UIImage的scale含义:
sacle = 实际大小 / 当前逻辑大小
当前逻辑大小 = 实际大小 / sacle
当前逻辑大小 = 实际大小 * (1/sacle)
sacle是什么,是缩小因子。1/sacle才是放大因子。
这跟一般情况的scale是放大因子是相反的啊!!!
比如UIScreen.scale=2.0,就表示我们的屏幕是被放大2.0倍的。
而UIImage.scale=2.0表示什么,表示当前的图片是被缩小了2.0倍的。
-----------------------------------------------end------------------------------------------------------------------
在同一张图片sacle=2.0和1.0时,UIImageView大小不变时,也就是说,虽然我没有高清晰图,但我把原来的图copy一个为@2x时,效果是不是一样的呢?
发现效果还真是不一样啊。@1.0是图片直接放大,有锯齿的。 @2.0是显卡放大,无锯齿了。
代码:
- (void)viewDidLoad {
[super viewDidLoad];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50.0, 50.0, 200.0, 32.0)] autorelease];
[self.view addSubview:label];
label.backgroundColor = [UIColor clearColor];
label.text = [NSString stringWithFormat:@"Screen.scale:%.1f", [UIScreen mainScreen].scale];
do {
UIImage *image = [UIImage imageNamed:@"test.png"];
UIImageView *imageView = [UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(15.0, 100.0, 32.0, 32.0);
[self.view addSubview:imageView];
[imageView release];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50.0, 100.0, 300.0, 32.0)] autorelease];
[self.view addSubview:label];
label.backgroundColor = [UIColor clearColor];
label.text = [NSString stringWithFormat:@"image.scale:%.1f size:%.0f*%.0f", image.scale, image.size.width, image.size.height];
}while (0);
do {
UIImage *image = [UIImage imageNamed:@"test2.png"];
UIImageView *imageView = [UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(15.0, 150.0, 32.0, 32.0);
[self.view addSubview:imageView];
[imageView release];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50.0, 150.0, 300.0, 32.0)] autorelease];
[self.view addSubview:label];
label.backgroundColor = [UIColor clearColor];
label.text = [NSString stringWithFormat:@"image.scale:%.1f size:%.0f*%.0f", image.scale, image.size.width, image.size.height];
}while (0);
}
转载于:https://my.oschina.net/songchunmin/blog/1561197
UIImage的scale相关推荐
- iOS开发之图片分辨率与像素对齐
像素对齐的概念 在iOS中,有一个概念叫做像素对齐,如果像素不对齐,那么在GPU渲染时,需要进行插值计算,这个插值计算的过程会有性能损耗. 在模拟器上,有一个选项可以把像素不对齐的部分显示出来.  ...
- iOS绘图详解-多种绘图方式、裁剪、滤镜、移动、CTM
iOS绘图详解 摘要: Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的 绘 ...
- iOS 图形处理 Core Graphics Quartz2D 教程
Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲 ...
- iOS图形编辑之Core Graphics
Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲 ...
- ios绘图教程(原文http://www.cocoachina.com/industry/20140115/7703.html)
os开发者平台 Cocos引擎中文官网 H5小游戏编辑器 退出chengtanze 首页 资讯 问答 论坛 Cocos2d-x 开发者中心 新手入门 专题 新闻日历 开发者通道 排行榜 代码库 图书库 ...
- Swift 4 放大镜功能实现
先上效果图吧,框框被限制在了image内了. 这个feature我把它用在了我的app里了,博客写得不容易,来star下啦? https://github.com/Imputes/Nike-Colle ...
- 《幸运大转盘》代码分享
<幸运大转盘>有一句代码是这样的: self.rotateView.transform = CGAffineTransformMakeRotation(-angle); 它出现在延迟派遣消 ...
- iOS获取图片的区域主色
之前的项目有这样的需求,有一个页面可以检索一块区域内图片的主色.效果图如图所示 下面是如何获取区域主色的实现思路: 首先,我们需要从相册,或者相机去获取图片: 其次,得到图片需要截取区域图片: 然后, ...
- iOS开发中自带的图标库
iOS 开发中苹果自带的图标库,uiimage可直接调用 @available(iOS 13.0, *) @objc public extension UIImage{ /// square.and. ...
最新文章
- 整数的最大值和最小值
- java核心技术----访问权限
- SAP Spartacus默认的baseSite是从源代码什么地方读取的
- 有的人走着走着就散了!
- (SenchaTouch+PhoneGap)开发笔记(2)开发环境搭建二
- CCF201812-2 小明放学
- 数字图像识别笔记(第三章-灰度变换与空间滤波)
- 用友NCCloud 补丁下载/用友ncc 补丁下载/nccloud 补丁下载
- Vue使用iconfont(阿里图标库)
- 2022年最新《小鹿线web前端课程+项目实践课程》
- 计算机专业课件ppt背景,ppt背景图片怎么设置
- Pinterest和Instagram哪个更好用?姐妹还是天敌...
- PHP气缸种类,【汽缸】【气缸】|× 【Q】√ - 校对标准:寻找权威依据 - Powered by phpwind...
- 表单中enter键,导致表单提交
- How DICK’S moved its software development in-house and aced omnichannel retail
- 加速linux开机速度 systemctl
- Java根据自定义模板生成Word
- 解析某个94aw演示备忘
- 国外主机注册域名有什么需要注意的吗?
- PLC课程设计--台车呼叫
热门文章
- 不发项目奖金,程序员怒删代码,被判 5 个月!
- 关于Java“回调”的详细理解及使用
- Windchill的web中的Spring
- 手机密钥连接linux主机
- 论文阅读--PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection
- 从0开始的Python学习001快速上手手册
- python-虎扑爬虫
- 【原创】MySQL 实现Oracle或者PostgreSQL的row_number over 这样的排名语法
- 再论JavaScript原型继承和对象继承
- Python 格式化输出 ( 颜色 )