首页 > 其他分享 >delphi Image32 之 快速入门

delphi Image32 之 快速入门

时间:2024-06-01 15:35:35浏览次数:21  
标签:Img32 入门 img delphi Free Image32 TImage32 Fmt png

  官方快速入门,加上了一些注解 [从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 单元。

   

标签:Img32,入门,img,delphi,Free,Image32,TImage32,Fmt,png
From: https://www.cnblogs.com/bluejade/p/18226009

相关文章

  • SQL入门教程
    一、数据查询语言知识点(DQL:DataQueryLanguage)1.语句书写顺序及执行顺序(1)语句书写顺序:select-distinct-from-join-on-where-groupby-having-orderby-limit(2)语句执行顺序:from-on-join-where-groupby-having-select-distinct-orderby-limit注:groupby后不能加......
  • Python教程-快速入门基础必看课程05-List索引
    摘要该视频主要讲述了Python中列表的基本操作,包括创建、添加元素、查找特定值、计算元素数量以及获取最后一个元素等。视频以清晰的例子和解释来展示这些操作,非常有助于初学者理解。此外,视频还讲述了Python中索引和切片的使用方法,这些是Python中非常重要的基础概念。掌握这些......
  • MapStruct的介绍及入门使用
    一、痛点  代码中存在很多JavaBean之间的转换,编写映射转化代码是一个繁琐重复还易出错的工作。使用BeanUtils工具时,对于字段名不一致和嵌套类型不一致时,需要手动编写。并且基于反射,对性能有一定开销。Spring提供的BeanUtils针对apache的BeanUtils做了很多优化,整体性能提升了不......
  • 下面提供一些C语言的入门示例代码
    下面提供一些C语言的入门示例代码,并附有注释,以帮助理解每个部分的功能。1.HelloWorld程序#include<stdio.h> //引入标准输入输出库intmain(){ //主函数的开始   printf("Hello,World!\n"); //打印"Hello,World!"到控制台   return0; //返回......
  • gRPC入门学习之旅(九)
    gRPC入门学习之旅目录 gRPC入门学习之旅(一)gRPC入门学习之旅(二)gRPC入门学习之旅(三)gRPC入门学习之旅(四)gRPC入门学习之旅(七) 3.10、客户端编译生成GRPC类1.在“解决方案资源管理器”中,使用鼠标左键选中项目名称“Demo.Grpc.Common”,然后单击鼠标右键,在弹出......
  • 运用JavaScript代码,使用Three.js框架在网页中实现3D效果,零基础入门Three.js,包含具体实
    不经意间看到了某个大佬做的网站~实在是太帅啦!查了查实现该效果的技术——原来是Three.js如果你也感兴趣的话,那就让我们来从零开始学习Three.js动态3D效果吧✨一、了解Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使......
  • 基础入门
    域名:www.baidu.com分类:二级域名和多级域名DNS(域名系统服务协议):主要用于域名和IP地址的相互转换,根据域名查出IP地址CDN(内容分发网络):尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定常见的脚本语言(网站程序的源代码所用的语言,语言的严......
  • SQL入门全攻略(一)
    一、引言在当今的数据驱动世界中,SQL(结构化查询语言)无疑是数据处理和分析的基石。无论你是数据科学家、数据库管理员还是业务分析师,掌握SQL都是必不可少的技能。本文将带你从SQL的基础知识开始,逐步深入,让你能够轻松上手并应用SQL。二、SQL基础1.SQL是什么?SQL是一种用于管理(......
  • 【Go基础】快速入门
    Go基础入门用20%的时间学习常用80%的语法官方网址(下载安装/官方文档/官方类库)DownloadGobinariesfromhttps://go.dev/dl/ReferencetheofficialGodocumentationhttps://go.dev/doc/SeeallthetheGopackageshttps://pkg.go.dev/AccesstheGoPlaygroundh......
  • CSS定位详细教学(CSS从入门到精通第六天)
    CSS第六天今日目标能够说出为什么要用定位能够说出定位的4种分类能够说出4种定位各自的特点能够说出为什么常用子绝父相布局能够写出淘宝轮播图布局能够说出显示隐藏的3种方式以及区别1.定位(position)介绍1.1为什么使用定位我们先来看一个效果,同时思......