官方快速入门,加上了一些注解 [从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. k8s新版本使用container而不是docker

    使用 Harbor 仓库作为 Kubernetes 集群私有仓库 Harbor 仓库信息 内网地址:hub.rainsc.com IP 地址:192.168.66.100 问题背景 在许多版本的教程中 ...

  2. 一个操作系统的设计与实现——第19章 IA32-e模式

    19.1 64位段描述符与GDT 在32位操作系统中,我们使用的是平坦模型而非分段模型,从而,段描述符的段基址和段限长均成了摆设.在64位模式下,就连CPU也淘汰了分段模型,转而固定使用平坦模型. 6 ...

  3. 【YashanDB知识库】同时设置默认值和非空约束时报错YAS-02070

    [问题分类]功能使用 [关键字]YAS-02070 [问题描述] SQL create table test01(id int,name varchar(10)); insert into test0 ...

  4. how to log iptables events

    warning level: iptables -A INPUT -j LOG --log-prefix "BAD_INPUT: " --log-level 4 iptables ...

  5. sicp每日一题[2.3]

    Exercise 2.3 Implement a representation for rectangles in a plane. (Hint: You may want to make use o ...

  6. CSS & JS Effect – Styling Input Radio

    原生 Radio 的 Limitation <input type="radio" style="width: 25px; height: 25px; cursor ...

  7. PMP——如何区分赶工与快速跟进?

    如何区分赶工与快速跟进? 在PMP考试中经常出现由于时间不够需要进行进度压缩的场景.进度压缩的常用工具有赶工和快速跟进两种方式.也可以辅助调整某些活动的提前量与滞后量来进行缓解.提前量是相对于紧前活动 ...

  8. 我是如何开发一款支持IDEA、PyCharm、Android Sutdio 等JB全家桶的摸鱼插件的

    公众号「古时的风筝」,专注于后端技术,尤其是 Java 及周边生态. 个人博客:www.moonkite.cn 大家好,我是风筝 前些天做了一款支持 Jetbrains 大部分 IDE 的摸鱼插件- ...

  9. WebGL学习笔记

    完整 demo 和 lib 文件可以在 https://github.com/tengge1/webgl-guide-code 中找到. 第 2 章 WebGL 入门 第一个 WebGL 程序 fun ...

  10. 利用 ACME 实现SSL证书自动化配置更新

    最近收到腾讯云的通知SSL证书要到期了,本想直接申请的发现现在申请的免费SSL证书有效期只有90天了,顺便了解了一下原因是包括Google在内的国际顶级科技公司一直都有在推进免费证书90天有效期的建议 ...