FMX框架中TBitmap.SetSize是否会自动初始化像素数据?
结论
你给出的代码运行后,像素缓冲区不会被初始化为0,会残留内存中的随机数据。
行为说明
- FMX框架的
TBitmap.SetSize设计行为和VCL不同:VCL的位图申请内存时默认会做清零处理,而FMX出于跨平台性能优化的考量,SetSize仅完成对应尺寸的显存/内存空间申请,不会额外执行初始化操作,这一特性确实未在10.4版本的官方文档中明确标注。 - 你实测到的部分设备不初始化的情况是符合FMX底层实现逻辑的,不要依赖任何隐式的初始化行为,如果业务要求像素初始为全透明,必须显式调用
Bmp.Clear(0)。 - 该行为在Delphi 10.4 Windows 32位目标下稳定复现,跨平台编译到Android、iOS等其他目标时也会保持同样的逻辑,不存在Windows平台特殊处理。
内容的提问来源于stack exchange,提问作者XylemFlow
相关产品推荐
相关产品推荐

