- 博客(48)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 美颜的奥秘——磨皮底层原理
前言据不完全统计,全世界每隔3秒就有一个人上传自己的自拍照,甚至不少人在P图上所花的时间都超过了化妆时间。从十多年前“美图秀秀”的横空出世,再到近年来的实时美颜。到今天,美颜功能已经嵌入到各类手机系统当中,帮助大家实现完美自拍。有玩笑说,中国的P图术、韩国的整容术和日本的化妆术瓜三分天下。此秘术自诞生以来教众不断,但受用者,可瞬间变成天仙下凡,号称“传说中的3大东方神秘力量”。由此可见,随着朋友圈、微博等自拍社交越来越盛行,拍个美美的照片已经是人们的刚需了。其实磨皮算法最底层的本质就是一种降噪算法,也
2021-08-25 00:35:08
4285
1
原创 UE4材质(七):世界场景位置偏移——会动的材质
世界位置偏移(World Position Offset) 输入允许网格体的顶点在世界空间中由材质操纵。这有助于实现使对象移动、改变形状、旋转和各种其他效果。这适用于环境动画之类的内容。
2022-05-07 16:44:12
6995
原创 UE4材质(五):不透明蒙版OpacityMask——草地
"遮罩"(Masked)混合模式用于您需要以二元(开/关)方式选择性地控制可见性的对象。例如,假定一个材质要模拟铁丝网围栏或格栅。某些区域看起来像是固体,而其他区域不可见。此类材质适合于"遮罩"(Masked)混合模式。
2022-05-07 16:33:06
5683
1
原创 UE4材质(三):材质表达式
可在创建材质时用作节点的材质表达式有很多,但常用的只有七个:纹理取样(Texture Sample)、常量(Constant)、常量3向量(Constant3Vector)、纹理坐标(TextureCoordinate)、平移(Panner)、乘法(Multiply)和插值(Lerp)。
2022-05-07 16:23:29
2541
原创 UE4材质(二):PBR材质
Physical Based Rendering(PBR):基于物理的渲染。基于物理的材质最重要的输入包括“金属色Metallic”、“高光度Specular” 和 “粗糙度Roughness”
2022-05-07 16:12:23
6183
原创 iOS相机CVPixelBuffer格式详解:YUV、RGB获取byte
1.iOS相机支持的CVPixelBuffer格式:kCVPixelFormatType_32BGRA = 'BGRA', /* 32 bit BGRA */kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v', /* Bi-Planar Component Y'CbCr 8-bit 4:2:0, video-range (luma=[16,235] chroma=[16,240]). baseAddr points
2021-09-20 20:43:14
3831
原创 iOS kCVPixelFormatType详解
命名方式:kCVPixelFormatType_{长度|序列}{颜色空间(bit长度)}{Planar|BiPlanar}{VideoRange|FullRange}1. Planar / BiPlanar主要针对YUV格式而言。Planar格式就是单平面模式,在这个模式下,一个buf存储所有的数据。将Y、U、V分量分别打包,依次存储。即YYYY…U…V…例如I420BiPlanar格式就是双平面模式,在这个模式下,亮度和色度被分成两个buf来存储。将Y和UV分别打包,一次存储。即YYYY…UV…
2021-09-20 19:45:23
907
原创 CMSampleBufferRef转UIImage
- (UIImage*)changeBufferToImage:(CMSampleBufferRef)sampleBufferRef { CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBufferRef); CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixelBuffer]; CIContext *context = [
2021-09-20 18:03:27
712
原创 C++智能指针无法创建私有构造函数的类的解决办法
正常来说这种写法是编译不过的:#include <memory>class A {public: static std::shared_ptr<A> create() { return std::make_shared<A>(); }private: A() {} };因为A类的构造函数是私有方法,无法访问。可以用以下办法解决:#include <memory>class A {public
2021-09-06 15:00:44
1276
4
原创 CVPixelBuffer和UIImage相互转换
CVPixelBuffer转UIImage:方法1:- (UIImage *)imageFromPixelBuffer:(CVPixelBufferRef)pixelBufferRef { CVImageBufferRef imageBuffer = pixelBufferRef; CVPixelBufferLockBaseAddress(imageBuffer, 0); void *baseAddress = CVPixelBufferGetBaseAddress(
2021-06-04 10:29:13
3265
原创 git使用ssh方式clone时出现 The authenticity of host XXX can‘t be established的解决方案
git使用ssh方式clone时出现 The authenticity of host can’t be established的解决方案1.删除根目录 .ssh 下的所有文件(Mac显示隐藏文件和文件夹快捷键:command+shift+.)2.重新生成key2.1. 修改正确的git用户名和密码(如果有需要的话)git config --global user.name "XXX"git config --global user.email XXX@XX.com2.2. 重新生成密钥
2021-05-27 16:11:08
8775
原创 Android安卓 获取当前函数调用堆栈的方法
在解bug或者排查问题时,经常需要知道一个方法在运行到里面的时候,是由谁来调用的,调用路径是什么(调用堆栈)Android 原生 SDK提供了方法: //获取调用堆栈的方法 String stackTraceString = Log.getStackTraceString(new Throwable());此时stackTraceString内容是:java.lang.Throwabl...
2020-04-27 14:27:46
5018
原创 Android安卓 读写锁ReentrantReadWriteLock 使用场景和使用方法
使用场景同一份数据 或者 同一个对象,存在被多个线程同时读取内容 或者 同时写入内容的情况。逻辑上应该允许多人同时读,但只能同时只有一人写,并且写的时候不允许有人读。使用方法1.创建读写锁 private ReentrantReadWriteLock mReadWriteLock = new ReentrantReadWriteLock();2.分别对读和写创建独立的上锁解锁方法...
2020-04-27 14:20:47
1368
原创 安卓Android getCacheDir()、getFilesDir()、getExternalCacheDir()、getExternalFilesDir() 区别
1. 有无Externel的区别:1.1 没有Externel:手机内部App存储路径一般是/data/data/包名,或者/data/user/0/包名,不同手机厂商的这个路径有差别1.2 有Externel:手机外部App存储路径(也就是SDCard路径)一般是SDCard/Android/data/包名,或者/storage/emulated/0/Android/data/包名...
2020-04-24 11:36:28
1134
原创 Git push推送出现remote: fatal: pack exceeds maximum allowed size问题解决版本
Git在推送到远端的时候,出现以下错误信息:remote: fatal: pack exceeds maximum allowed size原因是由于单个文件过大,导致推送失败解决方案:把大文件使用git-lfs管理具体操作方法:打开该git根目录下的.gitattributes文件(这个文件默认是隐藏的)在文件中添加一行:大文件名称 filter=lfs diff=lfs me...
2020-04-22 15:19:51
30198
5
原创 iOS开发-CocoaPod之Podfile依赖文件使用介绍
全局配置生成Podfile文件在xcode项目目录下使用命令pod init创建Podfile文件platform:指定平台platform :ios, '8.0'source:指定pod的来源,有全局source和特定source# 全局sourcesource 'https://github.com/CocoaPods/Specs.git' #官方默认源source '...
2020-04-16 17:11:17
2947
原创 iOS开发-CocoaPod之.podspec描述文件使用介绍
如何生成.podspec文件使用pod spec create命令可以创建一个.podspec文件spec.name:名称spec.name = "name"spec.version:版本spec.version = "1.0.0"spec.summary:摘要介绍spec.summary = "This library is about ..."sp...
2020-04-16 16:14:21
1801
原创 Android安卓Bitmap底层JNI操作
1.添加依赖头文件: #include <android/bitmap.h>库依赖:CMakeLists.txt里需要添加jnigraphics库的依赖:target_link_libraries(${MY_LIBRARY_NAME} jnigraphics ...2.主要方法介绍2.1 AndroidBitmap_getInfo:功能:获取Bitmap...
2020-04-16 14:03:00
1691
2
原创 Android安卓运行时so动态库加载失败问题解决办法
安卓App在启动或运行时经常会遇到.so动态库加载失败的情况,其中具体分2种情况:1.在程序启动时加载失败,这时候就需要用Relinker去重新加载,可以看我的另外2篇博文:Relinker源码分析、Android安卓本地库加载程序Relinker简单封装2.在程序运行过程中,已经加载好的.so库被卸载,导致使用的时候找不到符号,这种情况下就要在运行过程中,需要用到库的时候重新去加载第2种情...
2020-04-15 11:22:35
6036
原创 Android安卓本地库加载程序Relinker简单封装
import android.content.Context;import android.util.Log;import com.getkeepsafe.relinker.ReLinker;import com.getkeepsafe.relinker.ReLinker.Logger;public class MYSoloader { private static final ...
2020-04-15 10:53:34
2091
原创 C++类读写方法快速宏定义
定义:#define Getter(type, Func, field) \type get##Func() { return field; }#define Setter(type, Func, field) \void set##Func(type value) { field = value; }#define GetterSetter(type, Func, field)...
2020-04-13 15:20:30
578
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人