官方快速入门,加上了一些注解 [从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 之 快速入门的更多相关文章

  1. [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门

    [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...

  2. 《Delphi XE6 android 编程入门教程》推荐

    近5.6年已经没有看见关于delphi的新技术的书出来了(看来在国内delphi的使用量确实很低了), 高勇同学最近出了一本<Delphi XE6 android 编程入门教程>,上周刚拿 ...

  3. Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo

    Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如:   Memo1.UseSma ...

  4. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  5. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  6. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  7. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  8. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  10. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

随机推荐

  1. Windows平台体验StableSwarmUI-0.6.4-Beta经验版

    目录 StableSwarmUI install 经验版 StableSwarmUI 配置后端 StableSwarmUI 快捷安装脚本 StableSwarmUI 安装与启动 sd_xl_base_ ...

  2. HashMap深入讲解

    HashMap是Java中最常用的集合类框架,也是Java语言中非常典型的数据结构, 而HashSet和HashMap者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说HashSet ...

  3. ComfyUI 基础教程(三) —— 应用 Controlnet 精准控制图像生成

    一.前言 你是否有见过下面类似这样的图片: 看起来平平无奇,当你站远点看,或者把眼睛眯成一条缝了看,你会发现,这个图中藏有一些特别的元素.这就是利用了 Ai 绘画中的 ControlNet,实现对图片 ...

  4. hexo使用小技巧

    1.在博客中加入图片 使用语法 {% asset_img 1.jpg %} 这样hexo会自动渲染1.jpg.,然后1.jpg的位置需要放在同文件名的文件夹中,比如这篇博客叫hexo使用小技巧,那么这 ...

  5. 如何使用 Redis 实现后台房间的数据管理?

    ​  ​摘要:利用 Redis 实现房间业务管理的实践与思考. 文|即构业务后台开发团队 在一些互动场景中,比如语音聊天室.电商直播等,成员控制.连麦.献花.发弹幕等互动功能,通常要求后台服务器能够储 ...

  6. P1543 [POI2004] SZP 题解

    P1543 [POI2004] SZP 题解 传送门. 题目简述 有 \(n\) 个人,每个人都会监视另一个人,要求选出尽可能多的同学,使得选出的每一名同学都必定会被监视到.且选出的同学不可再监视其他 ...

  7. Eclipse中Java项目的导入和导出

    eclipse中项目的导出 当我们完成自己的java项目之后,我们可以将其打包发给别人,eclipse为我们提供了自动打包的功能. 之后单击finish即可.在你选择的导出位置便可以看到导出的压缩包: ...

  8. Google 应用出海计划 | 指南针 第六期强势回归启动报名

  9. 论文解读《MASTERKEY: Automated Jailbreaking of Large Language Model Chatbots》

    导言 ​ 在参加东南大学网络安全学院夏令营的契机下,我第一次接触大模型安全领域.L老师是网络安全领域的一位大牛,在和L老师交流期间,被告知需要准备一次paper presentation介绍四大会中感 ...

  10. select框多选(利用Bootstrap-select)

    前端HTML: <select id="usertype" multiple class="selectpicker" style="width ...