FireMonkey 跨平台框架下的图片缩放和 JPEG 编码

Delphi FMX正确加载图片最大限度减少内存占用(之一TBitmapSurface) Delphi FMX正确加载图片最大限度减少内存占用 国庆前,无意间发现App内存占用陡增,发现是几张4K图片加载引发的(TImage.Bitmap.LoadFromStream或TImage.Bitmap.LoadFromFile,加载大图片时(>=6M),D10.4下吃内存大的惊人,共23M的3个图片文件,用上面的句法吃了接近400M内存),由研究图像处理的群友提醒:图片是压缩格式,显示的时候要解压缩,占用内存当然就大了;所有静态图片在显示的时候,都相当于是bmp位图... 阅读详情

在 VCL 底下,把一个 Bitmap 变成 JPEG,是采用将 TBitmap 的内容赋值给 TJpegImage 的方式。

在 FireMonkey 底下该怎么做?

看到论坛有人提问,上网查了一下资料,自己写代码测试了一下。以下代码测试通过:

uses FMX.Surfaces;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bmp: TBitmap;
  Src, Trg: TRectF;
  NewWidth, NewHeight: Integer;
  AStream: TFileStream;
  Surf: TBitmapSurface;
begin
  if OpenDialog1.Execute then
  begin
    Image1.Bitmap.LoadFromFile(OpenDialog1.FileName);
    Src := RectF(0, 0, Image1.Bitmap.Width, Image1.Bitmap.Height);

    //这里缩小一半
    NewWidth := Trunc(Image1.Bitmap.Width / 2);
    NewHeight := Trunc(Image1.Bitmap.Height / 2);
    Trg := RectF(0, 0, NewWidth, NewHeight);

    Bmp := TBitmap.Create;
    try
      Bmp.Width := NewWidth;
      Bmp.Height := NewHeight;
      Bmp.Canvas.BeginScene;
      try
        Bmp.Canvas.DrawBitmap(Image1.Bitmap, Src, Trg, 1)
      finally
        Bmp.Canvas.EndScene;
      end;

      Image2.Bitmap.Assign(Bmp);

      // 保存的文件名带 jpg ,自动压缩为 JPG
      Bmp.SaveToFile('D:\testAAA.jpg');

      //保存到 Stream 看看
      Surf := TBitmapSurface.Create;
      AStream := TFileStream.Create('D:\testAAABB.jpg', fmCreate);
      try
        Surf.Assign(Bmp);
        //这个方法,通过字符串 .jpg 指定它输出时编码为 jpg,测试通过。
        TBitmapCodecManager.SaveToStream(AStream, Surf, '.jpg', nil);
      finally
        AStream.Free;
        Surf.Free;
      end;
    finally
      Bmp.Free;
    end;
  end;
end

总结:

1. 缩放,在 VCL 底下采用 Canvas.StretchDraw 方法。这里是直接 DrawBitmap 就可以。

2. 输出为 JPEG 文件,直接使用 TBitmap.SaveToFile,它自动根据文件名的后缀决定如何编码。因此也可以输出为 PNG 文件。

3. 输出为 Stream,TBitmap.SaveToStream 没找到设置输出格式的参数。稍微麻烦一点,采用 TBitmapCodecManager.SaveToStream 方法,给出图片格式参数字符串。需要注意到是,jpg 前面必须加上小点。如果没加,也不会报错,但实际输出的是 Bitmpa 图片的内容而不是编码后的 JPEG 的内容。

Delphi FireMonkey跨平台条码控件BarcodeSuite 3.5-D13实战指南 条码技术作为自动识别与数据采集的核心手段,其原理是通过特定规则对信息进行图形化编码与解码。在软件开发领域,跨平台条码处理能力对于现代移动应用和桌面系统具有重要技术价值,尤其在仓库物流、零售门店、资产管理等应用场景中不可或缺。本文聚焦于Delphi FireMonkey框架下的BarcodeSuite控件套件,该商业组件封装了条码生成与识别的复杂细节,提供了统一的API和一致的跨平台体验,有效解决了开发者在Android、iOS、Windows等多平台部署时遇到的渲染模糊、性能不佳等常见问题。通过集成摄像头组 阅读详情

相关推荐

FastReport FMX v2025.2 for Delphi 13安装与跨平台报表实战指南

报表控件是跨平台应用开发中连接数据与打印输出的关键组件,其核心原理在于通过模板定义文档结构,再结合数据源接口和统一的渲染引擎,实现一次设计、多处运行。面对FireMonkey框架在Android、Windows等平台上的打印差异和PDF导出需求,成熟报表方案能显著降低开发成本。FastReport FMX作为Delphi生态中常用的报表工具,支持可视化设计器、多种数据源绑定及PDF、Excel等格式导出,尤其适合处理中文乱码、分页错乱等移动端报表难题。在实际工程中,从安装部署、设计器操作到移动端字体与尺寸适

weixin_30096975的博客 319

FireMonkey开发: 图片缩放

图片缩放 FM的TBitmap增加了CreateThumbnail http://docwiki.embarcadero.com/Libraries/XE2/en/FMX.Types.TBitmap.CreateThumbnail TBitmap.CreateThumbnail(200,200);

东子的博客 3610

Delphi D11/D12原生DOCX引擎:不依赖Office、跨平台、纯Pascal实现

DOCX文件格式是Office Open XML标准的核心容器,本质为ZIP压缩的XML文档集合,解析需兼顾ZIP流式解包、OOXML规范映射与样式继承计算。其技术价值在于摆脱COM/OLE依赖,实现轻量、可控、可嵌入的文档生成能力,广泛应用于医疗报告导出、PDA扫码凭证、跨平台电子表单等场景。在Delphi生态中,D11/D12版本因ARC内存模型、UTF-8默认编码及FireMonkey跨平台演进,使传统DOCX库普遍失效。本方案提供纯Object Pascal实现的原生解析引擎,支持延迟加载、twip

weixin_31240035的博客 304

canvas需要gpu_使用GPU画布和TCanvas.DrawBitmap时低质量的缩小插值

When setting Delphi to use a GPU canvas (FMX.Types.GlobalUseGPUCanvas := True), under windows and android there doesn't seem to be high quality downscale interpolation performed when calling TCanvas.D...

weixin_42626820的博客 323

Delphi跨平台视频采集SDK:TVideoGrabber核心解析与实战避坑

视频采集是多媒体应用的基础能力,其本质是将硬件视频流可靠、低延迟、跨平台地接入应用程序。理解视频采集SDK需从设备抽象、数据管道、输出策略和智能分析四层原理切入——它不仅封装了DirectShow、AVFoundation、MediaCodec等底层API,更通过面向对象设计(如Camera.PanOffset、Video.FrameRate)统一了海康、大华、USB UVC等异构设备的控制接口。技术价值在于显著降低Delphi开发者在FireMonkey安卓PDA、iOS、macOS等平台上的集成成本,避

weixin_34090562的博客 384

Delphi 12.3图像处理全链路源码方案:ImageEn v12 + IEVision v7

图像处理是工业检测、医疗影像和移动扫码等场景的核心技术,其性能瓶颈常源于内存管理低效、GPU加速缺失与跨平台适配困难。基于Delphi的图像控件需兼顾VCL/FireMonkey双框架兼容性、TIEMemoryBitmap级内存控制及ONNX模型推理能力。ImageEn v12.0.0重构统一内存模型并集成GPU加速管线,IEVision v7.0.0采用Pipeline架构实现算法节点化与零拷贝数据流,二者协同构成可调试、可审计、可定制的源码级图像处理解决方案,广泛适用于Windows 11、ARM64

weixin_30225755的博客 342

使用freetype生成字体图片FireMonkey效率问题

下面是测试代码,经过优化后主要是重设png图像大小,严重影响速度,一万字可能需要5秒左右,解决方案,自己写一个png文件的解析生成单元,png格式文件还是比较简单的,如果单纯生成一个可调用的字体png图像文档,只需要包含必要的四个区块就可以了,(其实是两个,其他两个一个是固定的头部信息,一个是固定的尾部信息),关于png分析网上文档很多,不做分析,贴出原始FireMonkey的TBitmap测试代

DELPHI学习心得记录 1512

Delphi图表控件TeeChart Pro源码解析:从安装到高级定制

在数据可视化领域,图表控件是实现数据图形化展示的核心组件,其原理在于将抽象数据通过坐标映射、图形渲染转化为直观的视觉元素。对于Delphi开发者而言,掌握一款强大的图表控件能极大提升开发效率,快速构建企业级监控、报表和数据分析系统。TeeChart Pro作为Delphi生态中的标杆图表库,其技术价值在于提供了超过100种图表类型、丰富的交互工具以及完善的导出打印功能,同时支持经典的VCL框架和现代的跨平台FMX框架。无论是开发工业SCADA系统、财务分析工具还是科学计算应用,TeeChart Pro都能提

weixin_34130389的博客 684

如何将TImage里的图片另存为BMP、JPG、PNG格式的文件

之前我写了如何从数据库里读取图像数据并用Image控件显示,现在讲讲如何另存为图像文件。 procedure TForm_ShowPic.N1Click(Sender: TObject); var vPng:TPNGObject; vJpg:TJPEGImage; vBmp:TBitmap; vTmp:string; FType:Integer; vStream:TStr...

qq_18932003的博客 1049

PowerPDF for Delphi:原生PDF引擎与FullSource实战指南

PDF生成与解析是企业级Delphi应用的核心文档能力,其本质是基于PDF规范的对象树构建与流式渲染。传统方案依赖外部SDK或运行时字符串拼接,性能差、兼容性弱;而原生实现通过Object Pascal重写核心引擎,支持零依赖编译、高DPI适配与跨平台部署。技术价值体现在极致性能(单页生成压至210ms)、深度可控(FullSource可调试/裁剪)及合规保障(PDF/A-1a归档)。广泛应用于医疗报告、电商发货单、工业PLC数据报表等场景,尤其适配Delphi 11/12.3的RTTI演进与FireMon

weixin_29597551的博客 272

Delphi PDF控件深度解析:从PowerPDF实战到现代化替代方案

PDF文档处理是桌面应用开发中的核心需求,尤其在报表生成和数据导出场景中至关重要。其原理基于PDF文件格式规范,通过封装底层PostScript指令和对象结构,实现文本、图形和图像的精确渲染。在Delphi生态中,VCL控件通过提供类似TCanvas的接口,将复杂规范简化为可拖放的组件,显著降低开发门槛。这类控件的技术价值在于实现高效、可控的PDF生成能力,避免依赖外部库或打印机驱动,特别适合服务器端批量处理。应用场景涵盖企业报表、数据导出、表单生成等。本文以经典的PowerPDF控件为例,深入探讨其架构设

weixin_30481539的博客 317

XE下的FMX中压缩图片

用FMX压缩图片,发现FMX里的canvas没有draw,stretch,cliprect类,FMX里程序创建时会自动引用FMX.Graphics, 而这个单元内的TBitmap类的Canvas没有StretchDraw属性,也没有ClipRect类,所以定义TBitmap的图片不能裁剪。 而在VCL里,同样的方法却可以裁剪,原因在于vcl里引用的是vcl.graphics,引用单...

weixin_30340353的博客 289

Delphi TRichView控件深度解析:从源码编译到高级应用实战

富文本处理是桌面应用开发中的核心需求,它涉及图文混排、表格嵌入和复杂文档布局等技术。其原理在于通过自绘引擎精确控制每个元素的渲染,从而超越系统原生控件的限制。这项技术的价值在于能够构建高性能、高定制化的文档编辑器、报表系统和交互式表单,广泛应用于企业软件、专业工具和通信客户端等场景。TRichView作为Delphi生态中历史悠久的第三方控件库,通过其强大的Item对象模型和完整的源码(Full Source)支持,为开发者提供了实现上述复杂功能的坚实基础。本文聚焦于TRichView v23.0.1的编译

weixin_30082367的博客 243

FireMonkey ListView 绑定数据显示多个图片

概述 采用 Delphi 的 FireMonkey 框架,可以开发运行在 WINDOWS, Android, iOS 和 MacOS 上面的代码。其中一个比较常用的界面显示控件是 TListView。 如果数据是多条,来自数据库,或者来自多个对象的对象列表(TObjectList),采用 Delphi 的数据绑定功能(LiveBindings)可以让 ListView 显示来自数据的内容。 需求: ListView 显示的多条内容,每一条,可以有一个图片,有段文字,等等。Delphi 提供了几种固定

pcplayer的博客 1482

OFDM时频脉冲形状与子载波正交性的理解

从多载波调制的角度来理解子载波间正交,首先要明确OFDM默认的脉冲成型是时域矩形窗,时域上每个子载波 ej2πfnte^{j2πf_nt}ej2πfn​t 都被一个矩形窗脉冲gT(t)g_T(t)gT​(t)成型。其次,OFDM子载波间隔 等于 OFDM符号周期的倒数,这是子载波正交的条件。 ​ 根据时频脉冲形状,可以从时域上理解如左图(注意是矩形脉冲 乘 复指数),从频域上理解如右图(sinc脉冲 卷 频点)。 ​

weixin_43803202的博客 2215

300m半径无人机单兵侦测设备技术详解

300m半径无人机单兵侦测设备凭借其卓越的侦测性能、高效的识别能力、便捷的告警方式以及广泛的应用场景,成为现代军事、安保及应急救援领域的重要装备。300m半径无人机单兵侦测设备,融合了最新的无人机技术、高精度传感技术与实时数据处理技术,为单兵作战、巡逻及侦察任务提供了前所未有的视野与效率。该设备通过无人机搭载的高性能侦测模块,能够在复杂环境中实现300米范围内的精准侦测,大幅提升单兵的战场感知能力和决策效率。设备为被动式探测设备,确保安静安全运行,不暴露目标 设备耗电功率小,可长时间在野外使用。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1120

FMX保存JPG格式的Stream

刚刚看以前的笔记,估计这个用的人很少 var surf:TBitmapSurface; astream:TmemoryStream; begin surf:=TbitmapSurface.Create; astream:=TmemoryStream.Create; try Surf.Asssign(Image1.Bitmap...

weixin_30674525的博客 339

AI气象预报:数值模式融合与短临预警的工程实践

气象预报正经历从物理推演到数据驱动的认知范式转变。AI气象预报并非替代传统数值模式,而是通过数值模式融合弥补其在参数化误差、初值敏感性和计算效率上的固有瓶颈。其技术价值在于提升短临预警时效性与空间精度,支撑航空调度、电力调控、防洪应急等关键场景。实践中需兼顾物理一致性、可解释性与业务系统兼容性,避免纯黑箱建模带来的外推失效与不确定性缺失风险。本文聚焦AI作为超分辨率引擎、误差矫正器和短临加速器的三类落地路径,解析HEALPix投影、多尺度图建模、轻量级U-Net等核心适配方法。

weixin_28221501的博客 299

delphi 从流(jpeg流,png流)到Timage 的显示方法

delphi 从流(jpeg流,png流)到Timage 的显示方法

zhangxiaonanwin的专栏 9263

(04730)半导体器件之基本放大器工作原理(一)

放大器是构成各种电子线路的基本单元电路。所谓“放大”,就是将输入的微弱信号(微弱变化的电压或电流等)去控制直流电源提供的能量,并使输出按照输入的小信号变化规律而变化的过程。所以放大器的本质是能量转换器。本节重点学习基本放大电路的工作原理和基本分析方法及主要性能指标。

黄先生的博客 3007

高频功率放大器的设计实现

摘 要 随着无线通信技术的高速发展,市场对射频电路的需求越来越大,同时对射频电路的性能要求也越来越高。高频功率放大器是位于无线发射级末端的重要部件,为了弥补信号在无线传输过程中的衰耗,要求发射机具有较大功率的输出,通信距离越远,要求的输出功率越大。在高频范围内,为了获得足够大的高频输出功率,就要采用高频功率放大器。 本次课程设计的高频功率放大器的技术指标包括输出功率、效率、功率增益、由于高频频功率放大器的输出功率比较大,耗能比较多,所以工作效率就显得比较重要。本课程设计的高频功率放大器电路由两极功率放大器

qq_43543515的博客 3万+

delphi android 实例,Delphi xe7 FireMonkey / Mobile (Android, iOS)生成 QR Code完整实例

1 unitUnit3;23 interface45 uses6 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,7 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,8 FMX.Contr...

weixin_42596246的博客 306

Unity之OpenXR+XR Interaction Toolkit实现 Gaze眼部追踪

在虚拟现实(VR)和增强现实(AR)应用中,眼动追踪是一项强大而受欢迎的技术。它可以让开发者更好地理解用户的注意力和行为,并创造出更加沉浸和智能的体验。在本文中,我们将探讨如何使用 Unity OpenXR 实现Gaze眼部追踪功能。

TxNet 1751

[修正] Firemonkey Windows 控件有虚线残影问题

说明:在 Wndows 显示时,有时控件左方会显示一条虚线 适用:Firemonkey Windows (Berlin 或更高版) 修正方法: 请将源码 FMX.Canvas.D2D.pas复制到自己的工程目录里,再进行修改。 procedure TCanvasD2D.SetClipRects(const ARects: array of TRectF); ...略... ...

weixin_30809173的博客 138

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

weixin_42162924的博客 40

铁路场景雷达点云目标识别与追踪系统

本文介绍了一种基于毫米波雷达的铁路货运车站安全监控系统。该系统采用分布式架构,通过多个毫米波雷达节点采集点云数据,经过坐标转换、多雷达融合等处理后,利用机器学习算法实现列车、行人等目标的实时识别与追踪。系统包含数据采集层、处理层、目标识别层、追踪层、预警决策层和可视化层,能够克服传统视频监控受环境影响大的缺点,实现全天候可靠监测。文中详细展示了雷达数据解析和点云预处理的代码实现,包括坐标转换、数据格式解析和体素网格滤波等关键技术。该系统可有效预警铁路场景下的碰撞风险,提升货运车站的安全管理水平。

huanghm88的专栏 125
上一篇: 关于 Firebird 数据库的备份
下一篇: Delphi 10.4.2 社区版开发的 APP 在 Google play 发布成功
pcplayer
博客等级 码龄26年 633粉丝 285原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值