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版本使用.:奇数版本 ...
随机推荐
- 搜索引擎用法 cheatsheet
逻辑 写法 与 keyword1 keyword2 或 keyword1 OR keyword2 限定关键词的排列 "keyword" 限定搜索的网站 site:cnblogs.c ...
- 【Homebrew】之相关命令问题合集及iOS真机调试包
一.Homebrew更换国内镜像源(中科大.阿里.清华) Homebrew主要有四个部分组成: brew.homebrew-core .homebrew-bottles.homebrew-cask. ...
- HBuilder X在4K显示器怎么设置HBuilderX窗口本身的字体大小
在使用HBuilder X编辑器的时候,使用笔记本自身的显示器,编辑器窗口本身的字体大小都正好,但是将HBuilder X编辑器用在外接显示器(高清)或者4K显示器上的时候,就不行了.怎么解决呢? 在 ...
- FFmpeg开发笔记(五十一)适合学习研究的几个音视频开源框架
很多程序员想学习音视频的编程开发,却不知从何学习,因为音视频技术的体系庞大.知识杂糅,一眼望去就令人生怯.那么学习音视频建议站在前人的肩膀上,从优秀的音视频开源框架开始钻研,先熟悉这些开源工具的具体 ...
- sql语句去掉前面的0(前导零,零前缀)
sql还有个stuff的函数,很强悍. 一个列的格式是单引号后面跟着4位的数字,比如'0003,'0120,'4333,我要转换成3,120,4333这样的格式,就是去掉单引号和前导的0,用以下语句就 ...
- AI 视觉的应用|ZegoAvatar ⾯部表情随动技术解析
一.AI"卷"进实时互动 2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能.针对"身份"." ...
- dotnet 学习 CPF 框架笔记 了解 X11 里如何获取触摸信息
本文记录我学习 CPF 框架的笔记,本文记录我阅读 CPF 框架,学习到了如何在 dotnet C# 里面获取到 X11 的触摸信息,获取到多指触摸以及触摸点的面积和触摸点压感等信息的方法 开始之前, ...
- JavaScript – 理解 Function, Object, Prototype, This, Class, Mixins
前言 JavaScript (简称 JS) 有几个概念 Object, Prototype, This, Function, Class 是比较难理解的 (相对其它语言 C# / Java 而已),这 ...
- CSS – 冷知识 (新手)
<img> extra 4px at the bottom 参考: Extra 4px at the bottom of html <img> The mysterious 4 ...
- Unity中的三种渲染路径
Unity中的渲染路径 Unity的渲染路径 在Unity里,渲染路径(Rendering Path)决定了光照是如何应用到Unity Shader中的.因此,我们只有为Shader正确地选择和设置了 ...