zoukankan      html  css  js  c++  java
  • 认识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: emp est.jpg');

    {在窗体上预览图片}
    Canvas.Draw(
    0, 0, WicImg);

    {转换为 png}
    WicImg.ImageFormat :
    = TWICImageFormat.wifPng;
    WicImg.SaveToFile(
    'c: emp est.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:UsersNickDesktop1.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:UsersNickDesktop1.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: emp est.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;
    复制代码
  • 相关阅读:
    JS 中 == 和 === 区别是什么?
    说说事务的概念,在JDBC编程中处理事务的步骤
    JDBC访问数据库的基本步骤是什么?
    undefined,null 和 undeclared 有什么区别?
    Mybatis框架、什么是 MyBatis、#{}和${}的区别是什么?、Mybatis 动态 sql 是做什么的?都有、为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
    什么是CDN?哪些是流行的jQuery CDN?使用CDN有什么好处?
    MyBatis 与 Hibernate 有哪些不同?
    Redis如何做内存优化?
    shiro有哪些组件?
    简述Shiro的核心组件?
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3295881.html
Copyright © 2011-2022 走看看