文档章节

GdiPlus[45]: IGPGraphics (四) 关于呈现质量与合成模式

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 874
阅读 19
收藏 0
点赞 0
评论 0

相关内容有:
IGPGraphics.SmoothingMode;            { 绘图质量 }
IGPGraphics.InterpolationMode;        { 插补模式 }
IGPGraphics.CompositingMode;          { 前景色与背景色的合成混合模式 }
IGPGraphics.CompositingQuality;       { 图像合成质量 }
IGPGraphics.PixelOffsetMode;          { 像素的偏移模式 }

{ 文本的呈现质量要用 }
IGPGraphics.TextRenderingHint;        { 文本呈现模式 }
IGPGraphics.TextContrast;             { 文本灰度校正值(消除锯齿和 ClearType 文本的伽玛值校正) }

 
 
 
 
 

 

 

  

相关参数:
SmoothingMode { 对直线、曲线和已填充区域的边缘采用锯齿消除功能, 它不能控制路径渐变画笔 }
Invalid     // 一个无效模式  
Default     // 不消除锯齿, 等效于 HighSpeed、None
HighSpeed   // 不消除锯齿  
HighQuality // 消除锯齿, 等效于 AntiAlias
None        // 不消除锯齿  
AntiAlias   // 消除锯齿

 
 
 
 
 

 

 

  
InterpolationMode { 插补模式确定如何计算两个像素点之间的中间值 } Invalid // 等效于 QualityMode 枚举的 Invalid 元素. Default // 默认模式. Low // 低质量插值法. High // 高质量插值法. Bilinear // 双线性插值法; 不进行预筛选; 将图像收缩为原始大小的 50% 以下时此模式不适用. Bicubic // 双三次插值法; 不进行预筛选; 将图像收缩为原始大小的 25% 以下时此模式不适用. NearestNeighbor // 最临近插值法. HighQualityBilinear // 高质量的双线性插值法; 执行预筛选以确保高质量的收缩. HighQualityBicubic // 高质量的双三次插值法; 执行预筛选以确保高质量的收缩; 可产生质量最高的转换图像.
CompositingMode { 颜色合成模式 } SourceOver // 与背景色混合; 该混合由透明度确定 SourceCopy // 改写背景色
CompositingQuality { 图像合成时, 源像素与目标像素和合成方式 } Invalid // 无效质量 Default // 默认质量 HighSpeed // 高速度、低质量 HighQuality // 高质量、低速度复合 GammaCorrected // 使用灰度校正 AssumeLinear // 假定线性值
PixelOffsetMode { 像素偏移模式 } Invalid // 无效模式. Default // 默认模式. HighSpeed // 高速度、低质量呈现. HighQuality // 高质量、低速度呈现. None // 没有任何像素偏移. Half // 像素在水平和垂直距离上均偏移 -0.5 个单位, 以进行高速锯齿消除.

SmoothingMode 测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Pen: IGPPen;
  Rect: TGPRectF;
  i: Integer;
begin
  Graphics := TGPGraphics.Create(Handle);
  Pen := TGPPen.Create($FFB22222, 4);
  Rect.Initialize(ClientWidth * 3/8, ClientHeight * 3/8, ClientWidth / 4, ClientHeight / 4);

  for i := 0 to 4 do
  begin
    Graphics.SmoothingMode := TGPSmoothingMode(i);
    Graphics.DrawEllipse(Pen, Rect);
    Rect.Inflate(ClientWidth / 14, ClientHeight / 14);
  end;
end;

 
 
 
 
 

 

 

  

InterpolationMode 测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Image: IGPImage;
  Rect: TGPRectF;
  i: Integer;
begin
  Graphics := TGPGraphics.Create(Handle);
  Image := TGPImage.Create('C:\GdiPlusImg\Grapes.jpg');
  Rect.Initialize(10, 10, Image.Width * 0.5, Image.Height * 0.5);

  for i := 0 to 7 do
  begin
    Graphics.InterpolationMode := TGPInterpolationMode(i);
    Graphics.DrawImage(Image, Rect);
    Rect.Offset(Rect.Width + 10, 0);
    if Rect.X + Rect.Width > ClientWidth then
    begin
      Rect.X := 10;
      Rect.Offset(0, Rect.Height + 10);
    end;
  end;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;

 
 
 
 
 

 

 

  

CompositingMode 测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Brush: IGPLinearGradientBrush;
  Rect: TGPRect;
begin
  Graphics := TGPGraphics.Create(Handle);
  Rect.Initialize(20, 20, 200, 60);
  Brush := TGPLinearGradientBrush.Create(Rect, $FFA52A2A, $FFFFFF00, 0);

  Graphics.CompositingMode := CompositingModeSourceOver; //默认模式
  Graphics.FillRectangle(Brush, Rect);

  Brush := TGPLinearGradientBrush.Create(Rect, $80A52A2A, $80FFFF00, 0);

  Graphics.CompositingMode := CompositingModeSourceOver;
  Rect.Offset(0, 20 + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);

  Graphics.CompositingMode := CompositingModeSourceCopy;
  Rect.Offset(0, 20 + Rect.Height);
  Graphics.FillRectangle(Brush, Rect);
end;

 
 
 
 
 

 

 

  

CompositingQuality 测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Image: IGPImage;
  Rect: TGPRectF;
  Brush: IGPSolidBrush;
  i: Integer;
begin
  Graphics := TGPGraphics.Create(Handle);
  Image := TGPImage.Create('C:\GdiPlusImg\Grapes.jpg');
  Rect.Initialize(10, 10, Image.Width * 0.75, Image.Height * 0.75);
  Brush := TGPSolidBrush.Create($800000FF);

  for i := 0 to 4 do
  begin
    Graphics.CompositingQuality := TGPCompositingQuality(i);
    Graphics.DrawImage(Image, Rect);
    Graphics.FillRectangle(Brush, Rect);

    Rect.Offset(Rect.Width + 10, 0);
    if Rect.X + Rect.Width > ClientWidth then
    begin
      Rect.X := 10;
      Rect.Offset(0, Rect.Height + 10);
    end;
  end;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;

 
 
 
 
 

 

 

  

PixelOffsetMode 测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  BrushBack: IGPHatchBrush;
  Brush: IGPSolidBrush;
  Rect: TGPRectF;
  i: Integer;
begin
  Graphics := TGPGraphics.Create(Handle);
  BrushBack := TGPHatchBrush.Create(HatchStyleCross, $FFD0D0D0, $FFFFFFFF);
  Graphics.FillRectangle(BrushBack, TGPRect.Create(ClientRect));

  Rect.Initialize(0.34, 1, 5.1, 1.3);
  Brush := TGPSolidBrush.Create($80FF0000);

  Graphics.ScaleTransform(27.3, 17.3);
  for i := 0 to 4 do
  begin
    Graphics.PixelOffsetMode := TGPPixelOffsetMode(i);
    Graphics.FillRectangle(Brush, Rect);
    Rect.Offset(0, Rect.Height + 1);
  end;
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/12/22/1630120.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
Android图形---硬件加速(Hardware Acceleration)(四)

本文译自:http://developer.android.com/guide/topics/graphics/hardware-accel.html View层 在Android的所有版本中,通过使用View对象的绘图缓冲,或使用Canvas.saveLayer()方法,View对象...

长平狐
2012/10/16
59
0
WPF/Silverlight深度解决方案:(十七)GPU硬件加速下Silverlight超性能动画实现(上)

Silverlight3发布时,我和朋友都为其新增的GPU硬件加速功能激动不已,于是开始了肆无忌惮的连夜测试,可结果却实在让我们大失所望。是的,不论怎样修改代码都无法感觉到明显的性能提升。接下...

晨曦之光
2012/03/09
0
1
用AI让静图变动图:CVPR热文提出动态纹理合成新方法

  选自arXiv   作者:Matthew Tesfaldet等   机器之心编译   参与:路、李泽南      图画总是只能表现事物瞬间的形象,而动画则需要逐帧手绘,费时费力,人工智能是否能够帮助我...

机器之心
04/21
0
0
十个有关代码审查和质量的事实

这是一篇关于代码质量和代码评审重要事实的简短文章。问及了 680 家公司的代码质量和代码审查实践,下面是一些总结。 苏联检查员在审查一架 BGM-109G “战斧”地面发射巡航导弹。 事实一: ...

局长
2016/12/19
4.2K
10
vbr和cbr

视频编码中CBR编码和VBR编码的区别   VBR就是可变比特率,它与恒定比特率CBR有一些区别,关于CBR或VBR编码的区别如下:   通过使用Windows Media编码器,可以用恒定比特率(CBR)或可变比特...

吴之恒心
2017/03/06
0
0
合成模式(Composite)-结构型

原理 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 ...

jephon
2016/08/25
0
0
vs 2005 添加GDI配置

在VS2005当中由于自带了GDI+的开发包,所以不需要在安装GDI开发包,这些头文件的位置由VS中的$(WindowsSdkDir)/include自动包含进来了 下午自己添加了好几次,总是出现有报错,,在 stdafx.h...

种地瓜
2015/12/08
85
0
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:program filesmicrosoft sdkswindowsv7.0aincludegdiplusheaders.h(630) : 参见“G......

xxdd
2013/10/24
60
0
[发布] 用于读写ICO图标文件的 Photoshop 插件

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

hoodlum1980
2010/12/16
0
0
MFC边框重绘

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 pragma once incl......

江河海流
2016/01/30
509
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

@Qualifier指定注入的bean

有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 ...

少年已不再年少
8分钟前
0
0
gcviewer的使用

1、没有安装git软件 在编译打包GCViewer的过程中,不能执行git命令,错误信息如下: [ERROR] Failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin:1.4:create (create-build...

刀锋
21分钟前
1
0
Android LogUtil 日志优化 调试的时候打印 点击跳转

打印日志的时候,可以点击跳转 LogUtil.java public class LogUtil { private static boolean IS_DEBUG = BuildConfig.DEBUG; public static void i(String tag, String message) {......

Jay_kyzg
31分钟前
0
0
人工智能你必须掌握的32个算法(二)归并排序算法

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子...

木头释然
33分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
56分钟前
1
0
流利阅读笔记27-20180716待学习

生了娃照样能打,两位母亲温网会师 Lala 2018-07-16 1.今日导读 现今在生儿育女后回归事业的母亲们已经非常多见,但是很少有人想到,以高强度运动与竞争激烈为特色的竞技体育项目也会有 work...

aibinxiao
57分钟前
6
0
Guava 源码分析(Cache 原理【二阶段】)

前言 在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。 文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。 在开始之前...

crossoverJie
今天
0
0
OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
今天
948
20
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部