delphi Image32 之 快速入门
官方快速入门,加上了一些注解 [从WORD粘贴后失去了样式]
TImage32 类是关键。
TImage32 对象包含单个图像,所有图像操作都作用于此对象。
uses Img32; //引用单元
...
img := TImage32.Create; //创建TImage32对象
//执行一些其它操作
img.Free; //用完了要释放
图像存储、格式和文件访问。
Image32 库分别通过 Img32.Fmt.BMP、Img32.Fmt.PNG 和 Img32.Fmt.JPG 模块提供对 BMP、PNG 和 JPG 存储的文件访问。
uses Img32, Img32.Fmt.PNG; //要加载什么类型的图片,必需添加什么类型的单元引用
...
img := TImage32.Create;
img.LoadFromFile('beetle.png'); //自动会判断加载不同类型的图片
//执行一些其它操作
img.SaveToFile('beetle_modified.png'); //保存
img.Free;
图像处理
Image32 库具有大量处理图像的类和函数列表,包括:色调、亮度和饱和度调整;方框模糊和高斯模糊;擦除颜色;混合合并图像;作物;浮雕;翻转和旋转;缩放;提高;扭曲;转换;和特效
uses Img32, Img32.Fmt.PNG;
...
var
img: TImage32;
begin
img := TImage32.Create;
img.LoadFromFile('fruit.png');
img.Rotate(-angle45); //旋转
img.SaveToFile('fruit45.png');
img.Free;
效果如下:

uses Img32, Img32.Extra, Img32.Fmt.PNG;
...
img := TImage32.Create;
img.LoadFromFile('fruit.png');
img.SaveToFile('c:\temp\fruit_before.png');
Sharpen(img, 3, 10); //锐化,图片显示更清晰
img.SaveToFile('c:\temp\fruit_after.png');
img.Free;



uses Img32, Img32.Vector, Img32.Fmt.PNG, Img32.Transform;
...
var
img: TImage32;
src, dst: TPathD;
begin
img := TImage32.Create;
img.LoadFromFile('clouds.png');
src := Rectangle(img.Bounds); //将TRect转换为路径
dst := CopyPath(src); //复制路径
dst[1].Y := img.Height div 8; //修改路径点1的Y轴位置
dst[2].Y := img.Height * 7 div 8; //修改路径点2的Y轴位置
if ProjectiveTransform(img, src, dst, NullRect) then //投影变换
img.SaveToFile('c:\temp\clouds_proj.png');
img.Free;
end;



多边形渲染
Img32 提供了大量的绘图工具。
Img32.Draw 模块提供线条、虚线和多边形绘图功能,并包括几个渲染器,可生成:纯色;平铺图像;以及线性和径向渐变渲染。
Img32.Vector 模块还提供了许多矢量绘图功能,包括:矩形;圆形矩形;椭圆;馅饼和弧线;样条和贝塞尔;星;等。
uses Img32, Img32.Fmt.PNG,Img32.vector, Img32.Draw, Img32.Clipper2;
...
var
img: TImage32;
rec: TRect;
path: TPathD;
paths: TPathsD;
radGradRend: TRadialGradientRenderer;
begin
img := TImage32.Create;
img.SetSize(256,256);
rec := img.Bounds; //图形区域
rec := Img32.Vector.InflateRect(rec, -50,-50);
//区域对象缩小[也可以用系统自带函数]
//绘制一个渐变填充的星形
path := Star(PointD(128, 128), 50, 100, 7); //获取一个星形的路径
radGradRend := TRadialGradientRenderer.Create; //创建渐变渲染对象
radGradRend.SetParameters(rec, clFuchsia32, clYellow32);//设置渲染参数
DrawPolygon(img, path, frNonZero, radGradRend);//绘制多边形到 img中
radGradRend.Free; //释放渐变渲染对象
DrawLine(img, path, 1, clBlack32, esPolygon); //根据路径绘制线[即星形外边框]
//画一个星星的虚线轮廓
paths := InflatePath(path, 7, jsRound); //路径扩展(放大)
DrawDashedLine(img, paths,[4,4], nil, 1, clBlack32, esPolygon);
// 绘制虚线路径线段
img.SaveToFile('c:\temp\star.png');
img.Free;
end;

文本特效
uses Img32, Img32.Fmt.PNG, Img32.Text,Img32.Vector, Img32.Draw, Img32.Extra;
...
var
img: TImage32;
textOutline: TPathsD;
impactFont: TFontReader;
impact48: TFontCache;
begin
img := TImage32.Create(400,150);
//Load Windows' Impact TTF font 加载字体
FontManager.Load('Impact', 800);
impactFont := FontManager.GetFont('Impact'); //获取字体渲染对象
impact48 := TFontCache.Create(impactFont, DpiAware(48));
//创建指定大小的字体缓存对象
try
textOutline := impact48.GetTextGlyphs(20, 130, 'Image32');
//获取文本 Image32 的路径
//绘制文本使用阴影和3D效果绘制轮廓
DrawShadow(img, textOutline, frNonZero, 3);//绘制阴影
DrawPolygon(img, textOutline, frNonZero, $FF00DD00);//绘制多边形
Draw3D(img, textOutline, frNonZero, 3,4);//绘制3D效果
DrawLine(img, textOutline, 1, clBlack32, esPolygon);//绘制边框线
img.SaveToFile('c:\temp\Image32.png');
finally
img.Free;
impact48.Free;
//impactFont.Free; //managed by FontManager
end;
end;

什么!没有 VCL.Graphics?
这是一个深思熟虑的设计决策,因此将 Img32 库翻译成另一种语言和不同的操作系统相对容易。但话虽如此,VCL.Graphics 仍然用于 Img32.Fmt.PNG 和 Img32.Fmt.JPG 模块。
那么如何以 Delphi 形式显示图像呢?
Windows中的所有绘图都是使用设备上下文(DC)执行的,Delphi的VCL.Graphics将DC封装在TCanvas对象中,实际的DC是TCanvas.Handle。因此,使用 TImage32 的 CopyToDC 方法,其图像可以在任何具有 TCanvas 属性的 TControl 中显示;其中包括 TForm、TPanel 和 TImage 组件。
uses Img32;
...
img := TImage32.Create;
//做一些其它操作… …
// Image1是Delphi中自带的控件 TImage
Image1.Picture.Bitmap.SetSize(img.Width, img.Height);
Image1.Picture.Bitmap.Canvas.Brush.Color := clBtnFace;
Image1.Picture.Bitmap.Canvas.FillRect(Image1.ClientRect);
//将Image32中的图形复制到 对象的句柄,即可在对象的句柄对象显示图形
img.CopyToDc(Image1.Picture.Bitmap.Canvas.Handle);
img.Free;
否则,请使用包含 TImage32Panel 组件的随附的 Img32.Panels 单元。
欢迎微信搜一搜 IT软件部落 关注公众号,你可以了解更详细的内容

欢儿微信扫码关注 IT软件部落 公众号,你可以了解更详细的内容

delphi Image32 之 快速入门的更多相关文章
- [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门
[.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...
- 《Delphi XE6 android 编程入门教程》推荐
近5.6年已经没有看见关于delphi的新技术的书出来了(看来在国内delphi的使用量确实很低了), 高勇同学最近出了一本<Delphi XE6 android 编程入门教程>,上周刚拿 ...
- Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo
Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如: Memo1.UseSma ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
随机推荐
- 异源数据同步 → DataX 为什么要支持 kafka?
开心一刻 昨天发了一条朋友圈:酒吧有什么好去的,上个月在酒吧当服务员兼职,一位大姐看上了我,说一个月给我 10 万,要我陪她去上海,我没同意 朋友评论道:你没同意,为什么在上海? 我回复到:上个月没同 ...
- 折腾 Quickwit,Rust 编写的分布式搜索引擎-官方配置详解
Node configuration(节点配置) 节点配置允许您为集群中的各个节点自定义和优化设置.它被分为几个部分: 常规配置设置:共享的顶级属性 Storage(存储)设置:在storage部分定 ...
- Visual studio 2019 无法推送代码到 GitHub
博客转载:VS2022 无法推送到GitHub,也无法克隆项目_vs连不上github-CSDN博客 问题描述` 使用vs2019 git无法推送到github 解决办法` 按照大神的描述设置,非常好 ...
- 生产者消费者模式,以及基于BlockingQueue的快速实现
生产者消费者模式,以及基于BlockingQueue的快速实现什么是生产者消费者模式,简单来说就是有两个角色,一个角色主要负责生产数据,一个角色主要负责消费(使用)数据.那么生产者直接依赖消费者,然后 ...
- c++学习笔记(五):文件操作
目录 文件操作 文本文件 写文件 include 读文件 include 二进制文件 写文件 读文件 文件操作 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放 通过文件可以将数据持久化 ...
- 防御DDOS攻击
如何防御DDOS攻击 1.采用高性能的网络设备 首先要保证网络设备不能成为瓶颈,因此选择路由器.交换机.硬件防火墙等设备的时候要尽量选用知名度高.口碑好的产品.再就是假如和网络提供商有特殊关系或协议的 ...
- JavaScript – 小技巧 Tips
1e6 等价于 1 + 后面 6 个零 console.log(1e6 === 1_000_000); 模拟 C# 的 Record Deconstruct class Size implements ...
- ChatGPT中Java相关问答(包括Java基础知识和一些面试题)
分享一个自己学习Java时的记录ChatGPT中的对话:https://chatgpt.com/share/66e8f009-0fd0-8000-b458-8c5812d0b631 包括如下问题 Ho ...
- Excel 国产化替换新方案
前言 在当前数字化转型和信创(信息技术应用创新)战略背景下,企业对于安全性.自主可控性和高效办公工具的需求日益增加.作为一款国产自主研发的高性能表格控件,SpreadJS 正成为替换 Excel 的最 ...
- 全面掌握 Jest:从零开始的测试指南(下篇)
在上一篇测试指南中,我们介绍了Jest 的背景.如何初始化项目.常用的匹配器语法以及钩子函数的使用.这一篇篇将继续深入探讨 Jest 的高级特性,包括 Mock 函数.异步请求的处理.Mock 请求的 ...