官方快速入门,加上了一些注解 [从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. 淘宝订单信息获取接口,淘宝订单信息获取API

    在日常电商软件开发的工作中,我们经常会遇到需要淘宝的订单信息的场景,比如:打单.发货,又比如做BI工具等.这就需要用到淘宝订单信息获取接口.只有获取到淘宝订单信息,才能进行下一步工作. 目前这个接口是 ...

  2. Wordpress 建立公司网站

    1. 先安装好wordpress wordpress 6.4.2-php8.1-fpm-alpine php8.1 Login to wordpress http://www.hei-ya.com/w ...

  3. C#|.net core 基础 - 如何判断连续子序列

    前两天同事遇到了一个小需求,想判断一个集合是不是在另一个集合中存在,并且要求顺序一致,然后一起讨论了下应该怎么做,有没有什么比较好的方式?下面分享一下我们想到的方法,如果你也有不同的想法也可以分享给我 ...

  4. ChatGPT介绍与使用场景

    ChatGPT是OpenAI开发的一款基于GPT-3和GPT-4的人工智能聊天机器人."GPT"代表的是"Generative Pre-trained Transform ...

  5. 【题目全解】ACGO排位赛#12

    ACGO 排位赛#12 - 题目解析 别问为什么没有挑战赛#11,因为挑战赛#11被贪心的 Yuilice 吃掉了(不是). 本次挑战赛难度相比较前面几次有所提升. 爆料:小鱼现在已经入职了研发部门, ...

  6. JS实现树形结构数据的模糊搜索查询

    简单示例: 需求:输入 "题2" 字,希望树形结构中带有 "题2" 字的项显示,即使父节点没有,但子节点含有,父节点仍要返回. let arr = [ { ti ...

  7. 浏览器原生组件 shadow DOM(已完成)

    https://developer.mozilla.org/zh-CN/docs/Web/Web_Components/Using_shadow_DOM Web components 的一个重要属性是 ...

  8. QT数据可视化框架编程实战之三维散点图从入门到精通_补天云QT技术培训专家

    简介 本文将介绍支持GPU图形硬件加速的QT数据可视化框架编程实战之三维散点图从入门到精通_补天云QT技术培训专家.本文将创建一个含有三个序列的三维散点图,同时设定了坐标轴的标题和标签,使得用户点击表 ...

  9. Java以封装对象的方式读取CSV文件存储数据库

    依赖 <!-- https://mvnrepository.com/artifact/net.sourceforge.javacsv/javacsv --> <dependency& ...

  10. 【赵渝强老师】删除表和Oracle的回收站

    一.Oracle的Drop Table语句 首先,我们来看一下Oracle Drop Table的语法格式. 解释一下里面的参数: schema Schema表示方案名称,这里可以理解为用户名,缺省为 ...