zoukankan      html  css  js  c++  java
  • 再学 GDI+[89]: TGPImage(9) 图像缩放时的质量(算法)

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        ListBox1: TListBox;
        procedure FormPaint(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure ListBox1Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses GDIPOBJ, GDIPAPI;
    
    var
      n: Single = 0.75; {缩放倍数}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ListBox1.Align := alRight;
      with ListBox1.Items do
      begin
        add('InterpolationModeInvalid            ');
        add('InterpolationModeDefault            ');
        add('InterpolationModeLowQuality         ');
        add('InterpolationModeHighQuality        ');
        add('InterpolationModeBilinear           ');
        add('InterpolationModeBicubic            ');
        add('InterpolationModeNearestNeighbor    ');
        add('InterpolationModeHighQualityBilinear');
        add('InterpolationModeHighQualityBicubic ');
      end;
      ListBox1.ItemIndex := 1;
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      g: TGPGraphics;
      img: TGPImage;
      rt: TGPRectF;
    begin
      g := TGPGraphics.Create(Self.Canvas.Handle);
      img := TGPImage.Create('C:\temp\test.png');
    
      g.DrawImage(img, 4, 4, img.GetWidth, img.GetHeight);
    
      rt := MakeRect(4+img.GetWidth+4, 4, img.GetWidth * n, img.GetHeight * n);
    
      g.SetInterpolationMode(ListBox1.ItemIndex - 1);
      g.DrawImage(img, rt, 0, 0, img.GetWidth, img.GetHeight, UnitPixel);
    
      img.Free;
      g.Free;
    end;
    
    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
      Repaint;
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 213
      ClientWidth = 550
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poDesktopCenter
      OnCreate = FormCreate
      OnPaint = FormPaint
      PixelsPerInch = 96
      TextHeight = 13
      object ListBox1: TListBox
        Left = 357
        Top = 32
        Width = 185
        Height = 97
        ItemHeight = 13
        TabOrder = 0
        OnClick = ListBox1Click
      end
    end
    
    缩放时的算法模式(TInterpolationMode 枚举)列表:
    InterpolationModeInvalid             = -1; {等效于 QualityMode 枚举的 Invalid 元素. }
    InterpolationModeDefault             = 0;  {指定默认模式. }
    InterpolationModeLowQuality          = 1;  {指定低质量插值法. }
    InterpolationModeHighQuality         = 2;  {指定高质量插值法. }
    InterpolationModeBilinear            = 3;  {指定双线性插值法. 不进行预筛选. 将图像收缩为原始
                                                      大小的 50% 以下时,此模式不适用. }
    InterpolationModeBicubic             = 4;  {指定双三次插值法. 不进行预筛选. 将图像收缩为原始
                                                      大小的 25% 以下时,此模式不适用. }
    InterpolationModeNearestNeighbor     = 5;  {指定最临近插值法. }
    InterpolationModeHighQualityBilinear = 6;  {指定高质量的双线性插值法. 执行预筛选以确保高质量
                                                      的收缩.  }
    InterpolationModeHighQualityBicubic  = 7;  {指定高质量的双三次插值法. 执行预筛选以确保高质量
                                                      的收缩. 此模式可产生质量最高的转换图像. }
    
  • 相关阅读:
    简单排序(冒泡、选择、插入)
    配置Tomcat数据源
    使用spring的邮件发送功能
    安装Tomcat
    Spring-MongoDB简单操作
    cisco ASA ios升级或恢复
    ASA 用TFTP 备份配置方法
    DELL MD3200i存储控制器解锁方法
    IBM ServerGuide引导盘全系列下载网址
    ASA5520远程配置 telnet,ssh
  • 原文地址:https://www.cnblogs.com/del/p/1234641.html
Copyright © 2011-2022 走看看