变换

android视频适配与裁剪

。_饼干妹妹 提交于 2020-03-01 20:29:31
首先说下基本背景, 当我们使用android系统原生的VideoView播放视频时, 在XML中给它设置的一个尺寸, 但最终视频开始播放后, VideoView实际的尺寸可能并不是这个尺寸设置的大小. VideoView在测量自身的尺寸时会依据视频的真实尺寸来调整自己的大小, 遵循以下规则: 1. 实际视频在VideoView上播放时所有部分都是可见的,或缩小或放大, 总之一定要全部显示出来,不会裁剪实际视频. 2. 尽量保持实际视频的长宽比例, 具体是首先以我们用户定义的长度为标准, 等比例缩放视频大小, 直到长度达到我们定义的长度, 然后宽度(等比例缩放后的宽度)与我们定义的宽比较, 大于则以我们定义的宽度为准, 这样视频会在竖直方向上压缩, 最终播放时也就不会成比例了; 小于则它以视频缩放后的宽度为准, 这样它会比我们定义的高度小,最终播放的效果是等比例的. 最近开发有如下需求: 视频等比例放大,直至一边铺满VideoView(或屏幕)的某一边,另一边超出View的另一边,再移动到View的正中央,这样长边两边会被裁剪掉同样大小的区域,视频看起来不会变形,也即是:先把视频区(实际的大小显示区)与View(定义的大小)区的两个中心点重合, 然后等比例放大或缩小视频区,直至一条边与View的一条边相等,另一条边超过View的另一条边,这时再裁剪掉超出的边,

iOS核心动画笔记5-变换

﹥>﹥吖頭↗ 提交于 2019-11-30 12:34:14
变换 这一节主要讲的是, 对图层进行旋转,缩放扭曲等操作. 1. 仿射变换 在视图层面上, UIView有个属性叫做 transform, 可以进行二维层面上的图层变换. 主要包括: 旋转/平移/缩放操作. 当图层应用变换矩阵进行变换时候, 图层矩形内的每个点都会被相应的进行变化, 从而形成一个新的四边形的形状. 仿射变换中"仿射"的意思是无论变换矩阵用什么值, 图层中平行的两条线在变换之后仍然保持平行. 2. 创建仿射变换 CGAffineTransform CGAffineTransform实际上是一个3*2的矩阵, 在OC中用结构体表示, (CG前缀表示属于Core Graphcs框架), CG框架提供了方便的方法来创建CGAffineTransform结构体, 如下三个是创建旋转, 缩放,平移的方法, 返回值是CGAffineTransform类型结构体. CGAffineTransformMakeRotation(CGFloat angle) CGAffineTransformMakeScale(CGFloat sx, CGFloat sy) CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) UIView用来做变换的属性叫做transform, 对应CALayer的属性是affineTransform.