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版本使用.:奇数版本 ...
随机推荐
- 淘宝订单信息获取接口,淘宝订单信息获取API
在日常电商软件开发的工作中,我们经常会遇到需要淘宝的订单信息的场景,比如:打单.发货,又比如做BI工具等.这就需要用到淘宝订单信息获取接口.只有获取到淘宝订单信息,才能进行下一步工作. 目前这个接口是 ...
- Wordpress 建立公司网站
1. 先安装好wordpress wordpress 6.4.2-php8.1-fpm-alpine php8.1 Login to wordpress http://www.hei-ya.com/w ...
- C#|.net core 基础 - 如何判断连续子序列
前两天同事遇到了一个小需求,想判断一个集合是不是在另一个集合中存在,并且要求顺序一致,然后一起讨论了下应该怎么做,有没有什么比较好的方式?下面分享一下我们想到的方法,如果你也有不同的想法也可以分享给我 ...
- ChatGPT介绍与使用场景
ChatGPT是OpenAI开发的一款基于GPT-3和GPT-4的人工智能聊天机器人."GPT"代表的是"Generative Pre-trained Transform ...
- 【题目全解】ACGO排位赛#12
ACGO 排位赛#12 - 题目解析 别问为什么没有挑战赛#11,因为挑战赛#11被贪心的 Yuilice 吃掉了(不是). 本次挑战赛难度相比较前面几次有所提升. 爆料:小鱼现在已经入职了研发部门, ...
- JS实现树形结构数据的模糊搜索查询
简单示例: 需求:输入 "题2" 字,希望树形结构中带有 "题2" 字的项显示,即使父节点没有,但子节点含有,父节点仍要返回. let arr = [ { ti ...
- 浏览器原生组件 shadow DOM(已完成)
https://developer.mozilla.org/zh-CN/docs/Web/Web_Components/Using_shadow_DOM Web components 的一个重要属性是 ...
- QT数据可视化框架编程实战之三维散点图从入门到精通_补天云QT技术培训专家
简介 本文将介绍支持GPU图形硬件加速的QT数据可视化框架编程实战之三维散点图从入门到精通_补天云QT技术培训专家.本文将创建一个含有三个序列的三维散点图,同时设定了坐标轴的标题和标签,使得用户点击表 ...
- Java以封装对象的方式读取CSV文件存储数据库
依赖 <!-- https://mvnrepository.com/artifact/net.sourceforge.javacsv/javacsv --> <dependency& ...
- 【赵渝强老师】删除表和Oracle的回收站
一.Oracle的Drop Table语句 首先,我们来看一下Oracle Drop Table的语法格式. 解释一下里面的参数: schema Schema表示方案名称,这里可以理解为用户名,缺省为 ...