昨天在使用FreeImage的时候发现FreeImage对ICON的处理有问题,32位的帧读出来的背景居然是黑的。我猜应该是32位没有And的Mask数据。而它按照24位以下的处理方式把Alpha值填成255了。
只能自己动手写代码,也不复杂,算上把Windows单元抽出来声明的结构体,也就300行。经测试可以在Win32,Win64,Android,FMX for Linux上可以正常使用。
如此的简单,就不上传工程了,直接贴代码就是了。[……]
昨天在使用FreeImage的时候发现FreeImage对ICON的处理有问题,32位的帧读出来的背景居然是黑的。我猜应该是32位没有And的Mask数据。而它按照24位以下的处理方式把Alpha值填成255了。
只能自己动手写代码,也不复杂,算上把Windows单元抽出来声明的结构体,也就300行。经测试可以在Win32,Win64,Android,FMX for Linux上可以正常使用。
如此的简单,就不上传工程了,直接贴代码就是了。[……]
不知道从什么时候起Delphi编译的PE文件总是三个固定的导出函数。
一方面有强迫症的同学们会不爽,另一方面其实是不安全的。
这三个函数是:__dbk_fcall_wrapper,dbkFCallWrapperAddr,TMethodImplementationIntercept
有两种方式可以去掉他们。
1.修改RTL源代码,注释掉这几处函数的exports代码行。重新编译。不过重新编译对小白或者比较懒的同学确实不方便。况且出了新版本Delphi又要重做一遍。
2.把编译后的EXE,DLL处理一下,去掉这几个函数。
做了个小工具,可以删除EXE,DLL的导出函数的,可以批量删除导[……]
Delphi10.2中FireMonkey中GDIPlus放大图片的Bug,不知道从哪个版本开始的,还是一直都这样。
新建一个FireMonkey工程,窗口上放一个Image控件,WrapMode设置为Stretch,表示随控件大小缩放。指定一张小图。
默认使用D2D的时候放大没问题
关闭D2D使用GDIPlus渲染
initialization
GlobalUseDirect2D := False;
finalization
end.
再看:
边缘多了一圈渐变。
找到FMX.Canvas.GDIP.pas文件,拷贝到我们工程所在目录中。作如下修改[……]
盒子上人才济济,很快就有兄弟发现在Android中有问题。
经过调试,发现Android中TCanvas.DrawBitmap对透明处理跟Windows不太一样,而是把透明部分也覆盖上去了,于是自己处理了一下帧的叠加,自己复制Bitmap的Scanline颜色,跳过透明即可。
2017.4.19加入对FMX for Linux的支持
https://www.raysoftware.cn/?p=559[……]
用FireMonkey的同学们一定知道FireMonkey对GIF动画的支持不是太好,只有静态的。
网上已有的解决方案就是先手动预处理GIF文件分割成多个单张,然后放到BitmapList中,缺点是要手动处理,而且帧速率也麻烦。因为项目中要实现了一个GIF的格式处理,代码整理了一下,嫁接到FireMonkey中,给广大兄弟们使用。
主要是就实现一个GIF格式的Reader,把GIF每一帧解析出来变成TBitmap,帧速率读出来,按照指定的帧速率播放。
之前用GDIPlus写了一份,但是有两个原因促使我自己重头写。
1)GDIPlus不能跨平台只支持Windows,
2)效率偏低。也用[……]
这段时间用VC封装Windows类库,没有MakeObjectInstance处理窗口消息确实不爽,又不想使用MFC的消息映射,这玩意的效率和美观只能呵呵。
至于MakeObjectInstance是什么,Delphi转过来的同学必然很了解这个方便的功能,就是动态构造一个函数把普通函数转到一个类的成员函数。
VC X86实现起来没问题,但是X64实现起来的麻烦在于不能内嵌汇编了,X64必须结合ASM文件编译的obj(这一点还是感激Delphi的编译器,X86和X64都可以内联汇编)。
我的实现方案是通过构造一段ShellCode来达到目的。
用法类似的如下
再例如
&n[……]
Cocos2d-x默认字符串常量编码都是UTF8的,而Windows中的VC默认都是跟系统相同,比如简体Windows是GB2312或者GBK.繁体就是BIG5编码.
而我们大多数中国人用VC编译出来的字符串常量也就是GBK编码的字符串.
在Cocos2d-x界面上绘制的时候它是不知道的,只会认为这个是UTF8字符串,结果就出现了乱码.
解决方式也很简单.找个头文件加入下面的代码
需要用到中文字符串的时候
补充,在这篇博客发表后两天发现有更直接的方法.
这样VC编译器就会把字符串常量按UTF8编码.[……]
恭贺Delphi XE7诞生,Delphi XE7在编译器内部集成了我之前所实现的动态数组扩展.https://www.raysoftware.cn/?p=278
现在有一个更悠久的历史需求,在QC的Delphi板块上置顶了好多年.官方一直没有实现.
http://qc.embarcadero.com/wc/qcmain.aspx?d=21729
众所周知Delphi的record和CPP的struct是有区别的.CPP的struct可以看成是class的别名,可以有构造,析构,可以继承.
Delphi的record几年前开始支持方法,支持操作符重载,美中不足之处在于不能自己写默认构造函数.D[……]
增加了兼容性.
对于非标准的HTML做法,Tag中的符号没有转义做了兼容.
HtmlParser
或者
http://code.google.com/p/delphi-html-parser/[……]
具体用处呢,有很多,比如多进程浏览器共享Cookie啦,多个进程传送点数据啦.[……]