Graphics 单元新增了 TWICImage 类, 该类的功能源于新增的 Wincodec.pas 单元.

WIC 支持的图像有 BMP、PNG、ICO、JPEG、GIF、TIFF、HDP(HDP 是微软随 Vista 推出的新的图像格式).

TWICImage 的大多功能都非常容易使用, 它最强大的功能是 ImagingFactory: IWICImagingFactory 属性, 这是个类工厂的接口.

通过 TWICImage.ImagingFactory 获取类工厂后, 再调用 CreateBitmapFlipRotator 建立旋转变换接口(IWICBitmapFlipRotator).

然后用 IWICBitmapFlipRotator.Initialize 执行变换, 再把变换后的数据赋给 TWICImage, 至此完成变换.

图片格式的转换:

var
WicImg: TWICImage;
begin
WicImg := TWICImage.Create;
WicImg.LoadFromFile('c:\temp\test.jpg'); {在窗体上预览图片}
Canvas.Draw(0, 0, WicImg); {转换为 png}
WicImg.ImageFormat := TWICImageFormat.wifPng;
WicImg.SaveToFile('c:\temp\test.png'); WicImg.Free;
end;

图像的旋转变换:

procedure change(kind : Integer);
{
kind的取值:
WICBitmapTransformRotate0 = 0;
WICBitmapTransformRotate90 = $1;
WICBitmapTransformRotate180 = $2;
WICBitmapTransformRotate270 = $3;
WICBitmapTransformFlipHorizontal = $8;
WICBitmapTransformFlipVertical = $10;
}
var
wicImg : TWICImage;
factor : IWICImagingFactory;
flipRotator : IWICBitmapFlipRotator;
begin
wicImg := TWICImage.Create;
wicImg.LoadFromFile('C:\Users\Nick\Desktop\1.bmp');
factor := wicImg.ImagingFactory;
factor.CreateBitmapFlipRotator(flipRotator);
flipRotator.Initialize(wicImg.Handle, kind);
wicImg.Handle := IWICBitmap(flipRotator); Form1.Canvas.Draw(0, 0, wicImg); flipRotator :=nil;
factor :=nil;
wicImg.Free;
end;

   

图像的比例变换:

procedure stretch(kind : Integer);
{
kind的取值:
WICBitmapInterpolationModeNearestNeighbor = 0;
WICBitmapInterpolationModeLinear = $1;
WICBitmapInterpolationModeCubic = $2;
WICBitmapInterpolationModeFant = $3;
WICBITMAPINTERPOLATIONMODE_FORCE_DWORD = $7FFFFFFF;
}
var
wicImg : TWICImage;
factor : IWICImagingFactory;
scaler : IWICBitmapScaler;
begin
wicImg := TWICImage.Create;
wicImg.LoadFromFile('C:\Users\Nick\Desktop\1.bmp');
factor := wicImg.ImagingFactory;
factor.CreateBitmapScaler(scaler);
scaler.Initialize(wicImg.Handle, wicImg.Width *2, wicImg.Height *2,
kind);
wicImg.Handle := IWICBitmap(scaler);
Form1.Canvas.Draw(0, 0, wicImg); factor :=nil;
scaler :=nil;
wicImg.Free;
end;

  

图像的裁剪:

procedure TForm1.Button1Click(Sender: TObject);
var
WicImg: TWICImage;
Factory: IWICImagingFactory;
Clipper: IWICBitmapClipper; {修剪图像的接口}
r: WICRect;
begin
WicImg := TWICImage.Create;
WicImg.LoadFromFile('c:\temp\test.jpg'); Factory := WicImg.ImagingFactory;
Factory.CreateBitmapClipper(Clipper); r.X := WicImg.Width div4;
r.Y := WicImg.Height div4;
r.Width := WicImg.Width div2;
r.Height := WicImg.Height div2;
Clipper.Initialize(WicImg.Handle, r); WicImg.Handle := IWICBitmap(Clipper);
Canvas.Draw(0, 0, WicImg); Clipper :=nil;
Factory :=nil;
WicImg.Free;
end;

认识TWICImage类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. Delphi 缩放图像代码 - 支持PNG透明通道

    要求Delphi2007或者更高版本, 系统要求至少XP-SP2以上 实际上是利用了Windows的windowscodecs.dll这个文件的功能 在VCL里已经封装为TWICImage类 proc ...

  3. Delphi 缩放图像代码 - 支持PNG透明通道(利用了Windows的windowscodecs.dll)

    要求Delphi2007或者更高版本, 系统要求至少XP-SP2以上 实际上是利用了Windows的windowscodecs.dll这个文件的功能 在VCL里已经封装为TWICImage类 proc ...

  4. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  5. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  6. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  7. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  8. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  9. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

随机推荐

  1. Ubuntu下SSH安装

    step: 1.输入命令: sudo apt-get install openssh-server 2.验证sshserver是否启动了,以下两条命令均可 ps -e | grep ssh netst ...

  2. Java流程控制练习--万年历

    Java流程控制练习--万年历 标签: Java入坑之旅 0x01. 打印倒三角和正三角 public static void main(String[] args) { // TODO Auto-g ...

  3. ftp配置文件

    vsftpd配置文件采用“#”作为注释符,以“#”开头的行和空白行在解析时将被忽略,其余的行被视为配置命令行,每个配置命令的“=”两边不要留有空格.对于每个配置命令,在配置文件中还列出了相关的配置说明 ...

  4. js中parentNode,parentElement,childNodes,children

    首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点组成的,节点 ...

  5. python3 之__str__

    当某个类定义了__str__方法是,打印该类的实例对象就是打印__str__方法return出来的数据 示例: class Cat: """定义了一个Cat类" ...

  6. laravel项目利用twemproxy部署redis集群的完整步骤

    Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数.下面这篇文章主要给大家介绍了关于laravel项目利用twemproxy部署redis集群的相关资 ...

  7. stm32+ESP8266AT指令详细说明

    最近公司团队的项目用到ESP8266,使用的是stm32c8t6芯片,软件使用MDK,于是写下调试过程中的一些注意点.具体代码和涉及思路不能外泄,这里只给出我们调试过程中的注意的方面. 关于ESP82 ...

  8. Ubuntu 18.04 下配置 HAXM 加速 Android模拟器

    Ubuntu 18.04 下配置 HAXM 加速 Android模拟器 最近在vmware环境下搭建ubuntu18.04开发环境,开始发现总是运行android模拟器在console提示加载如下错误 ...

  9. 2017, X Samara Regional Intercollegiate Programming Contest 题解

    [题目链接] A - Streets of Working Lanterns - 2 首先将每一个括号匹配串进行一次缩减,即串内能匹配掉的就匹配掉,每个串会变成连续的$y$个右括号+连续$z$个左括号 ...

  10. swiper实例应用

    1.手机竖屏单页滑 为了防止图压缩,单独切图,背景用纯色 2.自由滑 很长的图,自由切割