Delphi
文章平均质量分 55
dbyoung
热爱编程
展开
-
dbImageSDK 高速数字图像处理
高速数字图像处理。支持 C++、C#、Delphi,等等语言调用原创 2022-10-21 16:31:38 · 890 阅读 · 0 评论 -
Delphi 如何调用 OpenCV?
Delphi OpenCV Java JNI原创 2022-09-10 23:52:47 · 3509 阅读 · 0 评论 -
视频捕获:预览、截图、录像(MP4 软/硬编码)、推流,一网打尽
问题来由: 公司项目要对接很多厂家的视频采集卡,每个厂家都提供了 SDK。 这些 SDK 基本上都是 VC 封装的。VC2008 、VC2010、 VC2012,都有。还有的竟然用 .Net 来封装。 麻烦的是同一个 VC 运行库,版本还不一样。比如 VC2008 有好几个版本。SDK 中,就使用了不同的版本。 VC 编写的程序都是这个尿性。看看 QQ(PC版) 就知道了。VC2008 、VC2010、 VC2012,都用到了。 这些设备厂家为什么就不能提供 MT 版...原创 2022-01-21 15:41:24 · 2417 阅读 · 0 评论 -
关于跨平台 UI 的思考
一:跨平台,这里的跨平台,指的是:Windows、Linux、MacOS、IOS、Andriod。二:跨平台,首先大家想到的是 Java。虽然众多平台都支持 Java,但 Java 效率低下。2D、3D游戏就没得完了。 .NET 现在跨平台了,但支持的设备、操作系统都不广。也不是个好的选择(虽然有 UnrealEngine 优秀的游戏引擎)。三:Flutter,谷歌开源跨平台UI框架。主要针对 Android、IOS 移动端。想跨所有平台,依然不是个好的选择。四:DirectX 只是 W..原创 2021-12-04 16:42:38 · 4573 阅读 · 0 评论 -
统计文本文件行数
这么个简单问题,居然在网上找不到现成的代码。只好自己做了。1、TStringList 法:function GetTextLineCount_SL(const strFileName: string): UInt64;begin with TStringList.Create do begin LoadFromFile(strFileName); Result := Count; Free; end;end;这种方案,只能针对小文件,大文件就不行了。原创 2021-12-02 17:22:08 · 1469 阅读 · 0 评论 -
Delphi Dll 动态库窗体中无法显示 Hint 问题的研究和解决
我的 PBox 程序中,Dll 动态库窗体无法显示 Hint 提示信息。只有在鼠标放到主窗体上,并且主窗体成为激活窗体时,才会有 Hint 显示。我当然希望,无论鼠标在哪个窗体上面,都可以显示 Hint 提示信息。这好像是很多 Dll 窗体的通病。百度、Google,查询了一番,都没有找到现成的答案。只能自己看 Delphi 源码了。源码基于 Delphi 10.4.2。一:标准窗体 EXE 程序中的 Hint 流程; 第一阶段:创建 Hint 窗体; 每一个 EXE ...原创 2021-10-29 13:57:03 · 1075 阅读 · 0 评论 -
超级文件搜索 v2.0 开源了
类似于 Everything 的软件。当然比 Everything 的搜索速度快。和光速搜索速度差不多。在我的电脑上,1500万文件,检索需要 2 --- 3分钟。相当快了。支持查询文件,操作文件等操作。开源地址:https://github.com/dbyoung720/PBox/tree/master/module/uFiles...原创 2021-10-24 18:33:32 · 693 阅读 · 2 评论 -
FFMPEG SDK FOR WINDOWS 编译成功发布
FFMPEG SDK FOR WINDOWS 编译成功发布FFMPEG :https://git.ffmpeg.org/ffmpeg.git编译时间:2021-09-06 (拉取最新代码)下载地址: X86: https://github.com/dbyoung720/PBox/tree/master/bin/Win32/plugins/ffmpeg X64: https://github.com/dbyoung720/PBox/tree/master/bin/Win64...原创 2021-09-06 14:00:17 · 274 阅读 · 0 评论 -
Delphi 汇编学习(十二)--- CRC32 校验
学习 SIMD 指令时,发现一条 crc32 指令,一看就知道,肯定是用来进行 CRC 校验的。在网上搜索了一番,BAIDU 不出什么有用的信息。很多代码,连基本的 CRC32 校验代码都是错的。GOOGLE 搜索了一些,都是 C++ 的。但 C++ 都倾向与写算法,没有什么具体的示例。也不知道对不对。看来只好自己写来验证了。我不敢说我写的肯定正确,但我会经过慎重测试,确认没有问题后,才公布。CRC32 校验算法有很多种:CRC32 IEEE 802.3、CRC32 Castagnoli、CRC3原创 2021-08-04 23:02:55 · 2820 阅读 · 2 评论 -
如何删除 Windows 托盘区指定图标?
以删除 QQ 图标为例:procedure TForm1.btn1Click(Sender: TObject);var hToolbar : THandle; I, Count : Integer; hProcess : THandle; PID : THandle; hButton : THandle; Buffer : Pointer; tbn : TTBButton; intLen : SIZE_T; strLength: In原创 2021-07-22 16:35:31 · 2032 阅读 · 0 评论 -
Delphi 汇编学习(十一)--- 图像旋转的极致优化
图像旋转原理:假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转RotaryAngle角度后,新的坐标设为(x', y'),有公式: x'= (x - rx0)*cos(RotaryAngle) + (y - ry0)*sin(RotaryAngle) + rx0 ; y'=-(x - rx0)*sin(RotaryAngle) + (y - ry0)*cos(RotaryAngle) + ry0 ; 那么,根据新的坐标点求源坐标点的公式为: x=(x'- rx0)...原创 2021-07-20 12:08:09 · 2242 阅读 · 1 评论 -
数据库使用经验两则
本人是数据库生手。这两则经验,也是在实际使用中发现的。网络上,好像也没有人提过。所以记录一下。避免后人入坑。经验1:数据库连接,最好使用计算机名称,不要使用 IP 地址。 如果有网络波动,IP 就会不通。数据库连接就会失败。 如果程序时时连着数据库,程序就很容易出错。使用计算机名称则不会。 网络波动,在实际现场环境中,经常出现。我也是被折腾近两个礼拜才发现这个问题的。经验2:最好不要使用 udl 文件来进行数据库连接。 ...原创 2021-06-24 10:17:34 · 253 阅读 · 0 评论 -
Delphi 中,InputQuery 函数的妙用
一般我们简单的输入提示,用 InputQuery 函数,复杂的就自己建窗体了。今天无意中看了一下 InputQuery 函数源码。发现比较有趣。1、标准写法(单个):if InputQuery('请输入密码:', '密码:', strResult) then2、扩展写法(多个):if InputQuery('请输入密码:', ['密码:', '重复密码:'], strResult) then3、密码写法(多个):if InputQuery('请输入密码:', [Chr(9) +原创 2021-04-28 16:49:31 · 1203 阅读 · 0 评论 -
WINDOWS 下编译 ffmpeg 源码总结
WINDOWS 下编译 ffmpeg 源码,有两种方式:VC、GCCVC 编译: https://github.com/ShiftMediaProject/FFVS-Project-Generator.git 优点:省时省力。动态库、静态库、X86、X64都支持。 缺点: A. 需要 VC 运行库的支持。作者也不打算脱离 VC 运行库。 B. 不...原创 2019-08-23 09:50:15 · 1751 阅读 · 1 评论 -
在 Delphi 中,以不封装的模式直接调用 OpenCV C++ Class DLL
不对 OpenCV 进行二次封装,直接调用 OpenCV 的 C++ 的 Dll,Delphi 测试源码地址:https://github.com/dbyoung720/DOpenCV.gitOpenCV 编译好的动态库文件:https://blog.csdn.net/dbyoung/article/details/114871178注意:Delphi 的测试程序,必须放到 OpenCV 的库文件目录下,或者将 OpenCV 的库文件目录放到系统搜索路径中。...原创 2021-04-02 15:11:58 · 2034 阅读 · 4 评论 -
OpenCV 4.5.2、4.5.3、4.5.4 、4.5.5 、4.6.0 SDK 编译成功发布
OpenCV :https://github.com/opencv/opencv编译时间:2021-03-16下载地址:X86:CPU 版本:https://github.com/dbyoung720/PBox/tree/master/bin/Win32/plugins/OpenCV(不包括扩展模块)X64: CPU 版本:https://github.com/dbyoung720/PBox/tree/master/bin/Win64/plugins/OpenCV/CPU(不包括扩展模块).....原创 2021-03-16 10:58:30 · 2924 阅读 · 7 评论 -
Delphi 汇编学习(十)--- 内存复制的极致优化
在 汇编学习(八)--- 图像水平镜像垂直镜像的极致优化 中,我们使用了 FastMove,来提高内存复制速度。但 FastMove 不支持 x64。而且很多年没有更新了。我们自己动手来写吧。由简到繁,容易理解。必须支持:X86、X64。必须支持:SSE2/SSE4/AVX1/AVX2。首先写一个最简单的 MOVE 函数。每一次复制 1 个字节:{ 每一次复制 1 个字节 <Byte> }procedure Move_Byte(const src: Pointer; dst:原创 2021-03-08 15:38:20 · 1013 阅读 · 2 评论 -
Delphi 汇编学习(九)--- 图像透明度调节的极致优化
图像的透明度,其实就是两幅图像的占比。R = R1 * (1 - K)+ R2 * KG = G1 * (1 - K)+ G2 * KB = B1 * (1 - K)+ B2 * KK 在 0.0 --- 1.0 之间。这里有浮点乘法运算,当然我们可以进行整点优化。标准函数:procedure ColorTrans_Scanline(bmpDst, bmpSrc: TBitmap; const intTransValue: Integer);var X, Y : ...原创 2021-02-27 13:42:49 · 562 阅读 · 0 评论 -
Delphi 汇编学习(八)--- 图像水平镜像垂直镜像的极致优化
一:水平镜像/翻转 将一幅图像水平镜像/翻转,代码很简单,就一句代码:procedure HorizMirror(bmp: TBitmap);begin bmp.Canvas.CopyRect(bmp.Canvas.ClipRect, bmp.Canvas, Rect(bmp.Width, 0, 0, bmp.Height));end;简单不。看一看 CopyRect 源码,procedure TCanvas.CopyRect(const Dest: TRect; Ca...原创 2021-02-27 00:35:26 · 745 阅读 · 0 评论 -
Delphi 汇编学习(七)--- 图像饱和度调节的极致优化
图像的饱和度调节的标准函数:procedure GetGrayAlpha(const intSaturationValue: Integer; var alpha: TAlpha; var grays: TGrays);var X : Integer; I : Integer; Gray: Integer;begin for I := 0 to 255 do begin alpha[I] := (I * intSaturationValue) shr 8;原创 2021-02-23 15:14:37 · 291 阅读 · 0 评论 -
Delphi 汇编学习(六)--- 图像对比度调节的极致优化
第五章中,我们知道图像对比度调节函数:procedure Contrast_ScanLine(bmp: TBitmap; const intContrastValue: Integer);var X, Y : Integer; pColor: PRGBQuad;begin for Y := 0 to bmp.height - 1 do begin pColor := bmp.ScanLine[Y]; for X := 0 to bmp.width - 1 do原创 2021-02-20 07:43:41 · 368 阅读 · 0 评论 -
Delphi 汇编学习(五)--- Delphi 程序员永久的痛
我是个 Delphi 程序员。一直很喜欢 Delphi。虽然现在国内 Delphi 的市场越来越小众。我依然喜欢它。一直都想用自己的微薄之力,给 Delphi 做一点点贡献。近几日春节放假,白天访亲问友,晚上闲来无事,学习学习 SIMD 程序优化。近两天在做图像的对比度调节的 SIMD 优化。procedure Contrast_ScanLine(bmp: TBitmap; const intContrastValue: Integer);var X, Y : Integer; p原创 2021-02-19 23:59:10 · 918 阅读 · 6 评论 -
Delphi 汇编学习(四)--- 图像亮度调节的极致优化
通过前三章的学习,我们知道了 并行优化 + SSE优化,是最优的解决方案。这一节我们用同样的方法,来对图像的亮度进行调节。Delphi 汇编学习(一)--- 图像灰值化Delphi 汇编学习(二)--- 学习 SIMD 的痛苦Delphi 汇编学习(三)--- 图像灰值化的极致优化procedure Light_SSEParallel_Proc(pColor: PRGBQuad; const intLightValue, bmpWidth: Integer);asm {$IFDEF WIN64}原创 2021-02-17 11:34:43 · 412 阅读 · 1 评论 -
Delphi 汇编学习(三)--- 图像灰值化的极致优化
看过Delphi 汇编学习(一)--- 图像灰值化,Delphi 汇编学习(二)--- 学习 SIMD 的痛苦,这两篇文章后,你就知道了:其实 AVX/AVX2 的优化效果并不佳。而且很多机器也不支持这些指令(Delphi 编译器也不支持 AVX 指令集)。而 SSE 的优化效果是比较不错的。并且 Delphi 编译器也支持 SSE 指令集(易博龙是不是也知道AVX 优化效果不好,所以才不支持的)。在示例中(https://github.com/dbyoung720/ImageGray.g...原创 2021-02-14 02:08:11 · 732 阅读 · 0 评论 -
《Delphi 版 everything、光速搜索代码》 关于获取文件全路径 GetFullFileName 函数的优化
《Delphi 版 everything、光速搜索代码》,文章中关于获取文件全路径的函数:GetFullFileName,有一个地方值得优化。就是有多个文件,它们可能属于同一个目录。譬如 System32 目录下有2000多个文件,GetFullFileName 还是进行了2000多次的查询,效率肯定是受影响的。先处理目录,获取目录全路径名称。然后文件只用查询一次,就知道它的父路径的全路径了。效率...原创 2018-04-25 11:57:43 · 2264 阅读 · 5 评论 -
Delphi 版 everything、光速搜索代码
近日没啥事情,研究了一下 everything、光速搜索原理。花了一个礼拜时间,终于搞定。废话不多说,直接上代码:unit uMFTSearchFile;{ dbyoung@sina.com 2018-04-23}interfaceuses Windows, System.Classes, Generics.Collections;{ 获取磁盘所有文件列表 }functi...原创 2018-04-23 15:16:41 · 3529 阅读 · 28 评论 -
PBox 基于 Dll 动态库窗体的模块化开发平台 (已开源)
一、由来: 1、每次开发一个新项目,都需要编写主界面,又要考虑各个子模块。重复造轮子。 2、写代码也好些年了。自己也写了很多小工具。分布在各个地方。需要使用的时候,到处找。十分不方便。 想着能不能将这些小工具都统一放在一起,变成一个个 Dll,在主窗体中调用这些由 EXE 修改而来的 Dll。 将这些 EXE 源代码工程修改为 Dll 工程时,尽可能的少修改...原创 2019-03-29 15:46:42 · 1296 阅读 · 2 评论 -
Delphi 如何调用 VC 的类的成员函数(二) --- 内存模式
https://blog.csdn.net/dbyoung/article/details/94576926 这篇文章中,调用 VC 的 C++ Class 类导出的 DLL 函数时,需要在 VC 中,对对象进行实例化。不在 VC 中实例化,在 Delphi 实例化可不可行?答案是肯定的。譬如 C++ Class Dll:// 这是已导出类的构造函数。CppDll::CppDll(){ return;}int CppDll::MyAdd(int a, int b){ .原创 2021-01-31 19:17:08 · 535 阅读 · 0 评论 -
Delphi 汇编学习(一)--- 图像灰值化
使用 Delphi 多年了,虽然看过 Delphi 中的汇编代码,但基本没有写过汇编代码。因为没有什么项目需求。今天因为要优化老程序的一段代码,到网上搜索了一下。发现很多都是汇编写的。效率也的确高。这让我有了学习汇编的冲动。汇编代码一般都是在对效率高的场合才会使用到,比如多媒体、视频领域。虽然我不是做相关的行业的。但学习学习总没有坏处。学习的最好办法是看例子(源代码)。越简单越好。下手的例子是 RGB2Gray。是的,图片 RGB 转 灰度图。网络上这样的代码很多,都是用 C/C++ 写原创 2021-01-23 00:54:40 · 1283 阅读 · 4 评论 -
从网络上下载文件的两种方式
Delphi 编程,从网络上下载文件,我一般用 UrlDownloadToFile 函数,简单,方便。function DownloadFile(const strURL, strDownFileName: string): Boolean; begin try Result := UrlDownloadToFile(nil, PChar(strURL), PChar(strDownFileName), 0, nil) = 0; except Res原创 2021-01-23 00:14:30 · 1217 阅读 · 6 评论 -
Delphi string 字符串如何传递给 C++ string
在 Delphi 中使用 C++ 类一直是个问题。受刘麻子大哥的启发,有了这个问题。Delphi 中 string 是一段内存块。C++ 中 string 是一个标准 C++ 类。既然是类,那就有大小。C++ string 类大小:24字节(VS2019 中测试获取到)。那么我们可以在 Delphi 中定义一个24字节的内存区,然后将数据填充到这个24字节的内存区中,传递给 C++,应该就可以了。C++ 中的 string 内存结构:type { C++ String 类内...原创 2021-01-15 09:24:03 · 778 阅读 · 0 评论 -
字符串(包含中英文、数字、符号)的对齐
字符串(包含中英文、数字、符号)的对齐我们知道,当字符串中包含中英文、数字、符号时,两行文本即使个数相同,也未必能对齐。UI 看着很不舒服。写了个对齐函数,让字符串都定长,就对齐了。{ 获取字符串宽度;包含中英文、数字等 }function GetStringWidth(const strValue: string; const font: TFont): Integer;var DC : HDC; hSavFont: HFont; Size : TSize;b原创 2021-01-13 11:21:14 · 782 阅读 · 0 评论