自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 导向滤波算法——OpenGL实现

导向滤波算法——OpenGL实现

2023-01-30 14:15:55 2273 1

原创 人像瘦脸效果实现(网格液化)——OpenGL实现

人像瘦脸效果实现——OpenGL实现

2023-01-24 20:56:27 1841

原创 人像美妆效果实现(贴纸)——OpenGL实现

人像美妆效果实现(贴纸)——OpenGL实现

2022-11-02 02:58:21 1240 1

原创 UE4材质 汇总

UE4材质内容汇总

2022-05-07 16:51:47 2848

原创 美颜的奥秘——磨皮底层原理

前言据不完全统计,全世界每隔3秒就有一个人上传自己的自拍照,甚至不少人在P图上所花的时间都超过了化妆时间。从十多年前“美图秀秀”的横空出世,再到近年来的实时美颜。到今天,美颜功能已经嵌入到各类手机系统当中,帮助大家实现完美自拍。有玩笑说,中国的P图术、韩国的整容术和日本的化妆术瓜三分天下。此秘术自诞生以来教众不断,但受用者,可瞬间变成天仙下凡,号称“传说中的3大东方神秘力量”。由此可见,随着朋友圈、微博等自拍社交越来越盛行,拍个美美的照片已经是人们的刚需了。其实磨皮算法最底层的本质就是一种降噪算法,也

2021-08-25 00:35:08 4285 1

原创 给世界上色——滤镜底层原理

滤镜底层原理

2021-08-03 15:46:30 4092 2

原创 std::unique_ptr和lambda表达式混用踩坑日记

std::unique_ptr和lambda表达式混用踩坑日记

2023-09-07 17:25:15 814

原创 基于边缘检测的磨皮算法实现——OpenGL版

基于边缘检测的磨皮算法实现——OpenGL版

2023-03-06 15:52:34 916 1

原创 OpenGL中图片尺寸和上屏尺寸不一致的变形问题解决

OpenGL中图片尺寸和上屏尺寸不一致的变形问题解决

2023-02-22 15:13:14 1615 1

原创 OpenGLES(二)——渲染管线

OpenGLES(二)——渲染管线

2023-01-30 15:31:19 1027

原创 OpenGLES(一)——介绍

OpenGLES(一)——介绍

2023-01-30 15:09:01 2880

原创 PS里的亮度/对比度/饱和度/色阶算法-OpenGL实现

PS里的亮度/对比度/饱和度/色阶算法-OpenGL实现

2022-10-22 16:51:07 3648 1

原创 OpenGLES性能优化

OpenGLES性能优化

2022-10-22 14:28:27 1273

原创 移动端(Android、iOS)内存泄漏检测方法

移动端(Android、iOS)内存泄漏检测方法

2022-10-22 12:25:47 2147

原创 iOS创建和使用线程Objective-C

iOS创建和使用线程Objective-C

2022-08-16 16:49:00 581

原创 UE4材质:踩坑指南

那些年我们踩过的坑

2022-05-07 16:55:17 2496

原创 UE4材质(七):世界场景位置偏移——会动的材质

世界位置偏移(World Position Offset) 输入允许网格体的顶点在世界空间中由材质操纵。这有助于实现使对象移动、改变形状、旋转和各种其他效果。这适用于环境动画之类的内容。

2022-05-07 16:44:12 6995

原创 UE4材质(六):不透明度Opacity——玻璃

"半透明"(Translucent)混合模式用于需要某种形式的透明度的对象。

2022-05-07 16:36:11 7834

原创 UE4材质(五):不透明蒙版OpacityMask——草地

"遮罩"(Masked)混合模式用于您需要以二元(开/关)方式选择性地控制可见性的对象。例如,假定一个材质要模拟铁丝网围栏或格栅。某些区域看起来像是固体,而其他区域不可见。此类材质适合于"遮罩"(Masked)混合模式。

2022-05-07 16:33:06 5683 1

原创 UE4材质(四):自发光颜色Emissive——灯

自发光颜色(Emissive Color) 输入将控制材质的哪些部分会发光。

2022-05-07 16:28:44 5060

原创 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

原创 UE4材质(一):纹理 Textures

UE4中纹理的基础知识

2022-05-07 15:40:23 2617

原创 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

原创 算法-几种经典的排序算法比较

2020-05-08 19:01:39 118

原创 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关注的人

提示
确定要删除当前文章?
取消 删除