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版本使用.:奇数版本 ...
随机推荐
- c# 复制文件夹内所有文件到另外一个文件夹
/// <summary> /// 开始转移 /// </summary> /// <param name="sender"></para ...
- 【VMware VCF】VCF 5.2:挂载远程 vSAN 数据存储。
VMware vSAN 解决方案中,为了充分利用 vSAN HCI 集群内的存储资源, vSAN HCI 和 vSAN HCI 集群之间可以相互共享存储资源,这种解决方案早期叫 vSAN HCI Me ...
- Mac 删除 Steam 游戏图标
Steam 将游戏安装在了 ~/Applications,打开访达,前往该目录,将相关游戏移到废纸篓.
- JVM笔记八-堆参数调优
JVM垃圾收集器(Java Garbage Collection).本教程均在JDK1.8+HotSpot为例来讲解的. 先来看看Java7的: 编辑 再来看看Jva8的 编辑 从上图中我们可 ...
- JavaScript – 小技巧 Tips
1e6 等价于 1 + 后面 6 个零 console.log(1e6 === 1_000_000); 模拟 C# 的 Record Deconstruct class Size implements ...
- SuperMap iPortal对接流数据方案
本文结合文章<SuperMap流数据应用技术方案>,使用SuperMap iPortal实时流数据接入数据上图APP中 iPortal软件下载地址(本文使用10.0.1 win64位): ...
- 第43天:WEB攻防-PHP应用&SQL注入&符号拼接&请求方法&HTTP头&JSON&编码类
#PHP-MYSQL-数据请求类型 SQL语句由于在黑盒中是无法预知写法的,SQL注入能发成功是需要拼接原SQL语句,大部分黑盒能做的就是分析后各种尝试去判断,所以有可能有注入但可能出现无法注入成功的 ...
- o1 式开源推理链项目 g1:可基于 Llama 3.2-90b 模型
g1 简介 g1 是一个开源项目,利用 Llama 3.1 70b 模型在 Groq 硬件上实现类似 OpenAI o1 的推理链能力.项目通过精心设计的提示策略引导语言模型进行逐步推理,解决了传统语 ...
- USB3.0与USB2.0编码方式的区别
首先,USB3.0传输的编码方式和USB2.0本质上是不同的. 1.USB3.0的编码方式 USB 3.0采用的是8b/10b编码方式,由于高速传输,信号干扰的问题,USB 3.0采用 8/10bit ...
- Data Summit 2022 大会资料分享(共23个)
Data Summit (数据峰会)是国际上关于数据管理.分析方面最新战略和技术研讨的顶尖峰会,通过行业领先的企业.专家的分享,共同探讨大数据和数据科学领域的发展现状与最新技术研究. 2022年5月1 ...