自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (6)
  • 收藏
  • 关注

原创 修改opencv代码支持utf8文件名

为了兼容所有编码文件名,把文件打开接口修改为操作unicode的,然后再外部调用依然使用char*的类型,但是传入的不能再是ansi编码,而是utf8编码,这样就可以正常了。opencv代码内部使用的文件接口使用的字符编码是本地编码,如果是中文系统,打开中文文件名是没有问题的,但是如果中文系统打开韩文或日文文件名,就会失败。

2023-12-20 15:25:27 467

原创 jni不再需要javah啦!

android studio 自动生成jni接口

2023-10-07 15:50:38 140

原创 重复相似图片查找工具

图片视频重复查找工具

2023-09-28 15:07:15 402

原创 Visual Assist安装后vs界面看不到菜单和按钮问题解决

vs2019的:C:\Users\?vs2022的:C:\Users\?不过,注意,这样后,vs的相关配置例如快捷方式啥的都会重置了,所以有需要的话,在执行操作前,建议点击vs菜单先把配置给导出,后面再导入。就是删除vs的一个配置文件,然后重新打开vs再把va插件启用,然后重新打开vs就可以了。

2023-07-14 14:34:04 4626 8

原创 exif库提速

exif库处理一个文件时候挺慢的,有时候一个图片甚至能高达几百毫秒,研究了一下是因为内部文件读取策略缘故,每次只读取一两个字节,导致磁盘操作太慢。特修改了一下,使用缓存方式,减少磁盘读取次数,效率高了三倍左右。以上都是使用release版本编译输出进行测试。修改前5000次需要1400毫秒,修改后5000次需要400毫秒左右。

2023-06-24 00:12:27 95

原创 opencv缩放中插值算法的效率对比

OpenCV中,resize 函数是用来对图片进行缩放的函数,其中含有参数dsize(输出图像尺寸)、fx(fy)(宽度高度的缩放因子)、interpolation(插值算法)等。其主要特点是将采样点放在了更大的网格中,然后用多项式拟合其上的插值函数,从而获得更高精度的处理效果。像素区域重采样,这种方法提供了一种基本的替代方法,可以用来执行图像的高斯模糊和其他卷积操作。双线性插值法,这是默认值,通常这种方法能够获得一个较好的效果,它的速度也还可以接受。最邻近插值法,这是最快的算法,但是会造成图像的马赛克。

2023-06-14 11:37:25 1499

原创 skia字体绘制的实现简介

Skia在实现字体绘制方面,采用了一种称为“文本操作”的技术。这种技术包含了字体库、文本路径和字形对象等多个组成部分,它允许开发者将字符或文本内容以路径的形式呈现出来。

2023-05-16 11:47:00 1076

原创 两种通配符匹配算法效率比较

是这样的,我想写一个通配符匹配的C语言函数供我的程序使用,考虑到这玩意这么成熟了应该直接拿别人的就行了,没必要浪费时间,于是我上网查了一下,发现有两种实现,都拿来用测了一下,发现都可以用,于是进一步进行测试效率,以便选择最好的。通配符匹配函数传入的参数有:字符串,模板。但是经过测试发现,同样的数据处理,方法二耗时竟然是方法一的三十倍左右,实在是大跌眼镜!咋一看,似乎有查找表的方式看起来更厉害似的,既然用上了空间,那么就应该时间吧。1.方法一:遍历字符串和模板的字符,一个一个地分析处理;

2023-02-07 22:52:08 150

原创 SetUnhandledExceptionFilter捕获所有异常

SetUnhandledExceptionFilter终极大法

2023-02-04 10:13:08 900 2

原创 adb协议之sync服务

看了一下网络上翻译的sync.txt有点生硬。自己看了一遍原版的,做一下整理总结。注:网上的翻译文章是“《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览SYNC.TXT翻译参考”。同步模式adb通信有普通模式和同步模式,在普通模式下给adb服务发送“sync:”指令后,adb服务以普通模式的协议答复“OKAY”或者“FAIL”,然后,adb和客户端之间的交互就进入同步模式。接下来,sync.txt中表达了这么一个意思:进入同步模式后呢,adb服务和客户端之间交互接下来就

2021-12-10 11:33:13 1403

原创 c语言function/bind/lambda及c回调效率对比

回调类型c语言(包括老版本C和新版本CPLusPlus)中支持以下类型的回调:1.C函数回调;2.模板function回调;初始化方式在初始化时候也有多种类型。下面通过代码演示一下。定义C函数类型例子:typedef void (*C_call_funType)(int a, const char* p);定义模板function类型例子:typedef std::function<void(int a, const char* p)> CPP_call_cu

2021-03-18 17:10:54 674

原创 网易云音乐播放器缓存文件转换研究

简介网易云音乐播放器通过网络从服务器下载音频数据进行播放,它使用了缓存机制,这样避免重复下载同样的音频数据,减轻了服务器的负担,节省了带宽,为共和国节能减排做出了巨大的贡献。网易云音乐播放器的缓存文件后缀名为uc,故在此称之为忧喜文件。作者针对忧喜文件做了一定的研究,通过本文进行介绍,并制作了一个演示交流程序“ 忧喜转换器 ”供读者使用体验。命名格式分析忧喜文件名命名规则:ID-BitsRate-MD5Text.uc,其中,ID:对应的音频文件id;BitsRate:音频位率

2021-03-12 23:10:47 1583

原创 使用xml定义shape边框只显示一边

在BY中,使用XML定义矩形的单边或多边线条方法比较简单,只需通过“borderMode”指定即可。参考下面例子(定义顶部描边): <shape> <stroke width="1dp" color="#f00" borderMode="top" /> </shape>对比Android中,以下方法定义一个单边线条的图形会复杂些:<layer-list xmlns:android="http:

2021-02-10 20:34:06 469

原创 使用C++创建Android中的authToken

android系统中的指纹识别调用时候需要提供一个hw_auth_token_t的结构,hw_auth_token_t就是authToken数据,这个结构填充如果不对,则会导致后面的接口调用不正常。authToken需要硬件来产生,其实关键的是hmac的计算,这个计算目前没有公开源码,大概原理是计算一个key,拿着key做hash。在安卓系统中,调用gatekeeper的verify接口可以生成authToken数据。下面通过例子代码演示如何调用(代码中的“hat”就是输出的authToken数

2021-02-04 09:43:58 408

原创 Android HIDL简介(指纹服务为例)

进程采用HIDL方式实现提供服务,一共有三个进程:客户端、渠道、服务端。其它什么XX模式的别管,以上是HIDL终极目标,也是目前android运行的方式。调用过程客户端调用接口 --> 接口联系渠道 --> 渠道转发给服务端 --> 服务端响应做相应的业务处理。客户端一般来说客户端都是APP。渠道这里的是hwbinder。服务端一个可执行文件,服务逻辑实现,一般都是一个类函数的实现。例如“BiometricsFingerprint.cpp”文件中的类

2021-01-06 16:49:29 431

原创 HIDL接口修改后编译报错问题

HIDL接口文件修改后,会提示hash不匹配的问题,例如下面的提示:ERROR: android.hardware.biometrics.fingerprint@2.1::IBiometricsFingerprint has hash e21385ffc342a7c28276fbf3b26f8c191400f84ebc9ebd879ef8e4c5358a635c which does not match hash on record. This interface has been frozen.

2021-01-05 11:13:39 2645

原创 DOS命令BAT/CMD文件中打印耗时方法

网上其它地方流传的方法有BUG,例如分钟可能会为负数。特改善一版,时长最大支持24小时。参考代码:rem 耗时计算,初始化set testtime=%time%set tmpIntText=%testtime:~0,2%if "%tmpIntText:~0,1%" == "0" ( set tmpIntText=%tmpIntText:~1,1%) set /a batStartH=%tmpIntText%set tmpIntText=%testtime:~6,2%if

2020-11-16 11:43:58 903

原创 WIN10恢复旧版edge(原版edge)

升级到20H2后,发现浏览器被替换为难用的edge chrome了,还是原版简洁易用,恢复回旧版edge方法:管理模式打开cmd,到这里 c:\Program Files (x86)\Microsoft\Edge\Application\85.0.564.67\Installer\注意:“85.0.564.67”可能是个另外的数字,例如20H2版本的win10中是“84.0.522.52”。然后输入:setup.exe --uninstall --system-level --ver

2020-11-14 13:01:17 10673 3

原创 cmake生成vc工程的基本使用分享

cmake是个什么东西?如果对于vc开发者来说,简陋而不严谨地说,cmake是用来生成vc工程的一个工具而已。其实cmake不仅仅可以生成vc工程,还能生成其它的makefile之类的代码编译需要的文件。基本使用双击打开cmake,把CMakeLists.txt拖到界面释放; 点击“configure”,下拉“Specify the generator for this project”选择一个生成目标; 【可选】选择目标平台类型,默认是 win32,可以选择x64; 【可选】编译时候

2020-09-15 11:23:34 1345

原创 本进程stdout重定向到管道 以及恢复

目标接管stdout输出,重定向到指定管道,不需要的时候则恢复。原理创建管道,通过微软的dup保存默认stdout,_dup2接口重定向,再通过_dup2恢复回来。代码参考以下代码。 int hStdOut; int hStdOutPipe[2]; if (_pipe(hStdOutPipe, OUT_BUFF_SIZE, O_BINARY | O_NOINHERIT) == -1) return -1; hStdOut = _dup(_fileno(

2020-09-05 11:25:26 862

原创 winqjs:quickjs vc版(msvc编译,vs2019)要点

QuickJS是一个比较小巧的js引擎。代码虽然支持多平台,但是在msvc中是无法编译通过的,因为作者习惯使用c99。msvc对c99还不够全面,很多特性都无法支持,我喜欢用visual studio开发和调试,并且有些时候需要用到lib直接一体化链接到exe中,所以必须quickjs代码进行改造。目前状态已经是可以编译出exe和lib文件,还有几个数学函数还有待完善。等后期更完善些再考虑整理一下开源。目前编译出来的exe和lib(32位)提交到了github,有兴趣可以试试:h

2020-08-04 17:41:19 2074 1

原创 用COM组件接口IFileDialog实现选择文件夹对话框功能

对于实现选择文件类似风格的对话框来选择文件夹,一般用系统的普通API接口,例如GetOpenFileName加上钩子函数或者SHBrowseForFolder,只能弹出这种丑陋而难用的界面,例如:我们的目标是这样的好用好看效果:原理就不细说了,简单得不得了,上代码给大家直接抄袭使用:CoInitialize(nullptr);IFileDialog* pfd = NULL;HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog,NU

2020-08-02 23:32:43 1305 2

原创 android studio显示logcat原理

adb是一个服务,它在本地的5037端口开了口,谁都可以通过这个口找它咨询,咨询它,需要遵循它的规则,随便问会被乱棍打回。它的规则其实很简单,每次问话必须:内容大小+内容。例如你想问adb一个hello要这样问:0005hello。adb如果认识就给你会个OKAY,不行就返回错误串。其他的规则,请自己查一下相关材料,有很详细的。基于这个规则,android studio也是通过不向5037端口咨询,然后adb不断地返回logcat日志而实现的。android studio向adb

2020-06-08 20:46:29 554

原创 用vnc控制mac系统无法输入密码的解决办法

用vnc登录的时候,不管怎么输入都没反应,但是你试试按回车键,又有反应提示密码不对,这时候,你按照在MAC上的使用习惯,切换一下输入法(例如CTRL+空格),反正随便切换,然后再试试输入密码,就可以输入了。如果帮到你,记得过来顶贴,谢谢。...

2020-05-27 22:36:05 3697 1

原创 clipdrawable属性正确说明(网上有些版本是错的)

drawable : 指定要裁剪的drawable clipOrientation:表示裁剪的方向,水平或者垂直,可以单独指定一个方向,或者同时指定两个方向 gravity:表示裁剪区的对齐方式,可以取多个值或在一起 取值含义: top 裁剪区放在本clipdrawable的顶部。当clipOrientation 是”vertical”,裁剪从顶部开始(从顶部开始展现) bottom ...

2020-05-16 09:18:17 276

原创 解释得最清楚的一篇:从使用角度理解android中的them和style

要点方式整理:app可以指定一个theme,简称apptheme任意一个view也可以指定一个theme,简称viewtheme任意个view都可以指定一个style系统默认给view准备一个style,在系统默认的apptheme中定义了style只影响所在view自身...

2020-04-01 23:24:31 233

原创 关于微信数据库文件夹与资源文件夹名称的问题

微信数据库文件夹名是“mm”+uin做个md5的结果,这个一直没变,例如:com.tencent.mm\MicroMsg\16f5ac2d884e052b03c1e00654531853而用户的资源文件夹名称,早期,以及目前整整运行的手机上,等于上面这个数据库文件夹名称,但是如果是新手机登陆微信后,资源文件夹名称就变了,和上门的不一样。分析了一下,不再是使用“mm”+uin,而是a...

2020-02-23 15:45:58 2623 4

原创 不ROOT而取微信数据?

苹果版微信数据无需ROOT,很容易可以拿到,我试过写程序把备份数据解压出来就能取得。例如下图这样,一个按钮就能全部解压出来:安卓版微信数据两部分:1.数据库(包含例如聊天文字等信息)存在系统保护的空间中;2.资源数据存放在手机开放空间(打开文件浏览器即可看到);其中数据库一般来说,不ROOT几乎没办法拿出来,拿不出来,你就无法把微信数据导出来。在此,探讨一种类似苹果...

2020-02-22 23:58:13 1358

原创 微信关于CompatibleInfo.cfg和systemInfo.cfg的优先级

微信初始化时候先读入CompatibleInfo.cfg进行初始化,后期如果发现systemInfo.cfg中有相同属性,会覆盖使用,最终以systemInfo.cfg的属性为准。所以IMEI之类的属性会以systemInfo.cfg为准。示例代码:读入CompatibleInfo.cfg初始化:if (fav == null) { fav = new load( "...

2020-02-22 23:28:52 1482

原创 Houdini 17正确安装方法

看到网上不少人说Houdini无法正常安装使用,结果发现按照介绍的步骤操作根本不行,差点就卸载了,后来看了英文版的安装技巧介绍,才发现方法并非如翻译那样。在此,特意介绍一下如何操作。这里只介绍正确的方法,不提供下载。网上有技巧文件,大家随便可以搜索。安装技巧的关键是:不仅仅要复制5行license key,而是复制第一个窗口的共10行!那么输入窗口只有5行怎么办? 简单,输入完...

2019-10-15 16:49:32 2632

原创 VS2(Visual Studio)总是提示项目过期解决办法

问题简述你明明已经编译过了,但是每次都提示你项目已经过期要求再编译,这不正常。研究了一下,我遇到的问题原因是缺少了一个文件,但是编译的时候并没有告诉我这个原因,让我猜半天。在此分享一下如何解决此类问题。解决办法这种提示,大部分原因都是因为你的项目中某些头文件已经不存在,例如被改名或者移走了,或者删除了,你找到后,在项目中手工移除就行。注意不是C或者CPP文件,因为C和CP...

2019-08-29 22:27:19 7668 1

原创 简介Webkit中AtomicString

简要介绍一下webkit中有AtomicString创建目的为了解决字符的超快速比较以及节省内存而生应用场景AtomicString大部分应用在保存脚本关键字,或者出现频率很高的字符串,例如HTML的各种tag,它们出现很频繁,用AtomicString保存对后期的比较会非常快(对比指针就行)。共享内存同样的字符串内容,不同的AtomicString实例会使用同样一份字符串...

2019-07-26 16:57:50 698

原创 C++中把临时实例赋给引用的问题

问题现象描述临时实例赋值给非常量引用,会警告:warning C4239: 使用了非标准扩展:“参数”,原因是:“非常量引用只能绑定到左值”。例如下面例子:struct B { B(int ti) {}};struct A { A() {}; A(B &other) { }};void func(void) { A cobj(B(123)); // 会...

2019-07-05 10:09:53 795

原创 curl多线程使用注意事项

多线程时候,注意初始化和超时功能使用1.必须在最开始调用:curl_global_init(CURL_GLOBAL_ALL);2.多线程对超时功能支持对有影响,例如curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30L),必须配合调用这个:easy_setopt(curl, CURLOPT_NOSIGNAL, (long)1);3.以上第...

2019-07-02 23:50:45 1502

原创 解决:WIN10任务栏中的文件夹右键菜单弹出太慢

如题,WIN10中用着用着会发现任务栏的文件夹右键菜单(下图)弹出来比较慢:刚开始我怀疑是有程序注册了文件夹的右键菜单弹出而导致,但是,有一个现象:在桌面或者在计算机其它地方的文件夹右键菜单弹出速度却非常迅速。所以,应该不是这个原因,网上查了一堆资料,基本上都是说去注册表清理一下右键菜单响应注册的库什么的,死马当活马医,试了,确实不行。最后自己研究,找到了真正的原因:最近历...

2019-06-30 15:52:48 8579 7

原创 chrome源码国内下载

大家都知道,在当前大陆,chrome源码要下载需要突破政府限制,我们程序员中,大部分都是遵纪守法的好公民,翻墙可是犯法的,可以换一种方式下载chrome源码。来这里:https://github.com/chromium/chromium打开网页后,点击“Clone or download”就可以下载它波包(tarball)了!如果遇到下载慢的问题:取消本次下载,重新...

2019-04-27 23:03:35 10788

原创 文本编码检测算法代码的一个BUG

网上流行的文本编码自动检测,一般都是拷贝过来的,一个名为erik peterson的人写的。看了一下其代码,似乎有个地方写错了。看代码中添加的中文注解:sjis_probability(unsigned char* rawtext) { unsigned int i, rawtextlen = 0; int dbchars = 1, jpchars = 1; lon...

2019-03-14 16:57:04 258

原创 win32下不同方法实现tsd效率对比

前言简单地说,tsd是同一个变量在不同线程代表的不同的内容。本文针对以下两种方法进行对比效率:1.__declspec(thread) 声明2.pthread方式测试方法测试代码如下:// __declspec(thread) 测试:static volatile __declspec(thread) int g_test_last_posA = 0;int c...

2018-12-02 09:38:20 234

原创 rxjava2要点介绍

rxjava2比1有什么差异?如果说开发rxjava1的时候,作者只是个程序初哥,那么rxjava2的时候,作者已经是有点经验的人了,rxjava2的接口函数、类名的命名以及接口调用方式,都比rxjava1成熟不少,且更容易理解,逻辑也合理些。flowable数据/事件源增加了一个叫flowable的东西,和observable类似,都是把数据/事件推给订阅方进行处理。特点如其名f...

2018-12-02 09:06:48 439

原创 深图系列:Android Studio使用C/C++

前言Android Studio支持C/C++,自从有了向导,用起来不再那么麻烦,但是配置起来还是有点复杂。特别是拿到别人的C和C++库要合并到自己的Java中使用,更为明显。本文针对在Android Studio中使用C/C++语言开发和编译做介绍和记录,供大家参考,也给自己做个记录。为了方便,以下使用“C”表示C/C++。注:本文只介绍CMake的方式编译C代码,旧方式(And...

2018-12-02 09:05:28 1091

缓存文件交流演示-忧喜转换器

缓存文件转换技术交流演示使用

2021-03-12

sqlcipher.rar

找了好久才找到,希望对你有用!用来打开加密的sqlite数据库文件。试试吧。

2019-09-16

carthage安装包

carthage安装包,下载后安装即可!只要是给下载不方便的各位使用。

2018-11-03

打补丁后的pjsip的configure文件

下载覆盖原文件就行。如果有担心,可以先把原文件备份改名。

2018-07-05

delphi 2011 xe 破解 补丁

delphi 2011 xe 破解 补丁 比那个便宜!

2011-11-18

svn 官方命令行

svn 官方命令行 无需到xx网站又注册又搞三搞四地下载,分享大家!

2011-11-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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