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版本使用.:奇数版本 ...
随机推荐
- Windows平台体验StableSwarmUI-0.6.4-Beta经验版
目录 StableSwarmUI install 经验版 StableSwarmUI 配置后端 StableSwarmUI 快捷安装脚本 StableSwarmUI 安装与启动 sd_xl_base_ ...
- HashMap深入讲解
HashMap是Java中最常用的集合类框架,也是Java语言中非常典型的数据结构, 而HashSet和HashMap者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说HashSet ...
- ComfyUI 基础教程(三) —— 应用 Controlnet 精准控制图像生成
一.前言 你是否有见过下面类似这样的图片: 看起来平平无奇,当你站远点看,或者把眼睛眯成一条缝了看,你会发现,这个图中藏有一些特别的元素.这就是利用了 Ai 绘画中的 ControlNet,实现对图片 ...
- hexo使用小技巧
1.在博客中加入图片 使用语法 {% asset_img 1.jpg %} 这样hexo会自动渲染1.jpg.,然后1.jpg的位置需要放在同文件名的文件夹中,比如这篇博客叫hexo使用小技巧,那么这 ...
- 如何使用 Redis 实现后台房间的数据管理?
摘要:利用 Redis 实现房间业务管理的实践与思考. 文|即构业务后台开发团队 在一些互动场景中,比如语音聊天室.电商直播等,成员控制.连麦.献花.发弹幕等互动功能,通常要求后台服务器能够储 ...
- P1543 [POI2004] SZP 题解
P1543 [POI2004] SZP 题解 传送门. 题目简述 有 \(n\) 个人,每个人都会监视另一个人,要求选出尽可能多的同学,使得选出的每一名同学都必定会被监视到.且选出的同学不可再监视其他 ...
- Eclipse中Java项目的导入和导出
eclipse中项目的导出 当我们完成自己的java项目之后,我们可以将其打包发给别人,eclipse为我们提供了自动打包的功能. 之后单击finish即可.在你选择的导出位置便可以看到导出的压缩包: ...
- Google 应用出海计划 | 指南针 第六期强势回归启动报名
- 论文解读《MASTERKEY: Automated Jailbreaking of Large Language Model Chatbots》
导言 在参加东南大学网络安全学院夏令营的契机下,我第一次接触大模型安全领域.L老师是网络安全领域的一位大牛,在和L老师交流期间,被告知需要准备一次paper presentation介绍四大会中感 ...
- select框多选(利用Bootstrap-select)
前端HTML: <select id="usertype" multiple class="selectpicker" style="width ...