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. public private protect

    public 公有  使用public意味着声明public之后的成员对每个人都是可用的 private 私有  除非必须公开底层实现细目,否则就应该将所有的域指定为private protect 继 ...

  2. OpenStack中的Multipath faulty device的成因及解决(part 1)

    | 版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.如有问题,可以邮件:wangxu198709@gmail.com 简介: Multip ...

  3. 当mysql 遇到 ctrl+c

    目的 为了理解MySQL在执行大SQL时,对执行CTRL+C产生的疑惑,本文通过实验测试和源码分析两个方面,对MySQL处理CTRL+C的详细过程进行分析和讲解,从而解除DBA及开发人员对CTRL+C ...

  4. bzoj 1178 [Apio2009]CONVENTION会议中心

    这题好难啊! 我好菜啊! 思路:对于最多线段不相交, 我们可以按左端点sort之后,贪心取. 但是这个题要求选取的线段排序之后序号的字典序最小. 那么我们如果按序号贪心地从大往小往里放, 那么对于第k ...

  5. CentOS和Windows下配置MySQL远程访问的教程

    CentOS和Windows下配置MySQL远程访问的教程   一.前言 由于实验在云服务器上跑的结果不是很理想.所以,现在切换到局域网服务器.因此,需要重新配置 Windows 服务器和 CentO ...

  6. 001.Parted工具使用

    一 Parted简介 1.1 parted和fdisk 通常使用较多的磁盘管理工具为fdisk,但由于磁盘越来越廉价,且磁盘空间越来越大,而fdisk工具分区存在大小限制,只能划分小于2T的磁盘.因此 ...

  7. 【Ray Tracing in One Weekend 超详解】 光线追踪1-7 Dielectric 半径为负,实心球体镂空技巧

    今天讲这本书最后一种材质 Preface 水,玻璃和钻石等透明材料是电介质.当光线照射它们时,它会分裂成反射光线和折射(透射)光线. 处理方案:在反射或折射之间随机选择并且每次交互仅产生一条散射光线 ...

  8. 【HDU 3590】 PP and QQ (博弈-Anti-SG游戏,SJ定理,树上删边游戏)

    PP and QQ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  9. 六省联考2017 Day1

    目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...

  10. [HDU5714]拍照

    [HDU5714]拍照 题目大意: 河上有\(n(n\le10^4)\)个船只,小明希望把尽可能多的船只都完整地拍到一张照片中. 小明位于河的边上,并且可以在河边的任意位置进行拍照,照相机的视野恰好为 ...