认识TWICImage类
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类的更多相关文章
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- Delphi 缩放图像代码 - 支持PNG透明通道
要求Delphi2007或者更高版本, 系统要求至少XP-SP2以上 实际上是利用了Windows的windowscodecs.dll这个文件的功能 在VCL里已经封装为TWICImage类 proc ...
- Delphi 缩放图像代码 - 支持PNG透明通道(利用了Windows的windowscodecs.dll)
要求Delphi2007或者更高版本, 系统要求至少XP-SP2以上 实际上是利用了Windows的windowscodecs.dll这个文件的功能 在VCL里已经封装为TWICImage类 proc ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
随机推荐
- 使用InstallShield打包windriver驱动-转
转自:http://blog.csdn.net/weixin_29796711/article/details/72822052 用户在使用我们用windriver开发的硬件驱动时,需要先安装wind ...
- ubuntu下root和安装mysql
sudo password创建新的root密码: 1.用当前登录用户打开终端,在终端输入命令 sudo passwd,输入当前用户的密码然后回车 2.会提示输入新密码,输入完成后回车(http://w ...
- NET 架构指南频道
NET 架构指南频道 微软在Visual Studio 2017 正式发布的时候也上线了一个参考应用https://github.com/dotnet/eShopOnContainers , 最近微软 ...
- 西安电子科技大学第16届程序设计竞赛网络同步赛 G-小国的复仇
sb找规律. 分解因数. #include<bits/stdc++.h> #define LL long long #define fi first #define se second # ...
- jQuery-Selectors(选择器)的使用(二、层次篇)(转载)
原文:http://www.cnblogs.com/bynet/archive/2009/12/01/1614405.html 本系列文章导航 jQuery-Selectors(选择器)的使用(一.基 ...
- Codeforces.862D.Mahmoud and Ehab and the binary string(交互 二分)
题目链接 \(Description\) 有一个长为\(n\)的二进制串,保证\(01\)都存在.你可以询问不超过\(15\)次,每次询问你给出一个长为\(n\)的二进制串,交互库会返回你的串和目标串 ...
- 【BZOJ-4530】大融合 线段树合并
4530: [Bjoi2014]大融合 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 280 Solved: 167[Submit][Status] ...
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem H. Parallel Worlds 计算几何
Problem H. Parallel Worlds 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c7 ...
- JavaScript基础之运算符及全面的运算符优先级总结
算数运算符: 加+,减—,乘*,除/,求余%,加加++,减减——, 加减乘除求余运算与数学上的用法完全一样. 不过,加号+还有连接字符串的作用,其他运算符还可以将字符串数字转换成数值型,参见JavaS ...
- CentOS下使用LVM进行分区(转)
说明:为什么抄,因为这篇文章图文并茂,所有测试都在CentOS 6和7测试过. 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统 ...