文档章节

再学 GDI+[89]: TGPImage(9) - 图像缩放时的质量(算法)

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 440
阅读 11
收藏 0
本例效果图:



代码文件:
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;  {指定高质量的双三次插值法. 执行预筛选以确保高质量
                                                  的收缩. 此模式可产生质量最高的转换图像. }

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/07/03/1234641.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
[发布] Photoshop ICO 文件格式插件 V2.0版

    [更新预告] 我正在开发 ICO 插件的 3.0 版本。增加了新的比原来更好的缩放算法。同时将改进一些 UI。预计 2017 年 6 ~ 7 月可以发布。2017 年 6 月 11 日。     【声明】此插件下...

hoodlum1980
2010/12/29
0
0
WinForm版图像编辑小程序(实现图像拖动、缩放、旋转、抠图)

闲暇之余,开发一个图片编辑小程序。程序主要特点就是可方便的对多个图像编辑,实现了一些基本的操作。本文主要介绍一下程序的功能、设计思路。 下载地址:百度网盘。https://pan.baidu.com...

源之缘
2018/12/05
0
0
[发布] 用于读写ICO图标文件的 Photoshop 插件

    这是我为 Photoshop 编写的一个文件格式插件,IcoFormat,用于读写 Windows 图标文件(扩展名为ICO, CUR)。图标文件格式的PS插件在很多年前有一个老外曾经写过,不过我现在提供的插...

hoodlum1980
2010/12/16
0
0
图像的上采样(upsampling)与下采样(downsampled)

缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图。放大图像(或称为上采样(upsampling)或图像...

漫步当下
2018/05/04
0
0
图像放缩中最近邻插值和双线性插值的基本原理

图像的缩放很好理解,就是图像的放大和缩小。传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。当然,在计算机上,我们不再需要用放大尺去放大或缩小图像了,把这个工...

andrew659
2009/11/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【PG内核】事务ID冷冻简述

数据库代码中事务ID的类型TransactionId定义为:typedef uint32 TransactionId。因此事务ID最大值为2^32-1=4294967295。 事务ID是需要循环使用的,为了做到这一点,数据库在做vacuum时将很老...

movead
21分钟前
13
0
深入学习SpringMVC以及学习总结

一、优点: 1.SpringMVC简化web程序开发; 2.SpringMVC效率很好(单例模式); 3.SpringMVC提供了大量扩展点,方便程序员自定义功能; 如果想学习Java工程化、高性能及分布式、深入浅出。微服...

编程SHA
22分钟前
1
0
关于开源分布式事务中间件Fescar,我们总结了开发者关心的13个问题

开源分布式事务中间件 Fescar 自1月10日上线v0.1版本以来,受到了开发者们的极大关注(watch249,star3005,fork649,社区讨论的issue58,数据统计于1月17日14:00),可见,天下苦分布式事务...

阿里云官方博客
22分钟前
1
0
斯皮格尔:我们敢于采纳非常疯狂的创意

“阅后即焚”照片分享应用 Snapchat 母公司 Snap 的 CEO 埃文-斯皮格尔(Evan Spiegel)近日接受了英国《金融时报》记者的采访,谈到了该公司的未来发展,与社交网络 Facebook 的竞争,限制自己...

linuxCool
23分钟前
1
0
javaweb文件上传以及文件上传成功后但是目录中没有显示

经过看别人写的代码然后自己实际操作一遍,基本都是搬运也是为了练习。1:创建fileUpLoad.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UT......

小橙子的曼曼
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部