GDI+相关的作图,每种语言都有其自身的封装类,但本质上是一样的,下面这篇文章写的非常好,对于C#的Graphics类也是使用的,所以转载了,原文在这里:

http://www.cnblogs.com/del/archive/2009/12/22/1630120.html

相关内容有:


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;

另外在补充一个万一老师的GDI+的学习文章列表地址,虽然是用Delphi写的,但是还是有参考意义:

http://www.cnblogs.com/del/category/113557.html

【转】Graphics 关于呈现质量与合成模式的更多相关文章

  1. JAVA设计模式之合成模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...

  2. 合成模式(Composite)-结构型

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

  3. 设计模式_Composite_合成模式

    形象例子: Mary今天过生日.“我过生日,你要送我一件礼物.”“嗯,好吧,去 商店,你自己挑.”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买.”“喂,买了三件了呀,我只答应送一件礼物的哦 ...

  4. Java设计模式-合成模式

    合成模式有时也叫组合模式,对象组合成树形结构以表示"部分-整体"的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 "部分/ ...

  5. java设计模式---合成模式3

    实例 下面以一个逻辑树为例子,以上面的原理图为蓝本,看看如何实现并如何使用这个树,这个结构很简单,但是如何去使用树,遍历树.为我所用还是有一定难度的.   这里主要用到树的递归遍历,如何递归.如何控制 ...

  6. java设计模式---合成模式2

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

  7. 组合模式 合成模式 COMPOSITE 结构型 设计模式(十一)

    组合模式(合成模式 COMPOSITE) 意图 将对象组合成树形结构以表示“部分-整体”的层次结构. Composite使得用户对单个对象和组合对象的使用具有一致性.   树形结构介绍 为了便于理解, ...

  8. Java设计模式(六)合成模式 享元模式

    (十一)合成模式 Composite 合成模式是一组对象的组合,这些对象能够是容器对象,也能够是单对象.组对象同意包括单对象,也能够包括其它组对象,要为组合对象和单对象定义共同的行为.合成模式的意义是 ...

  9. 《JAVA与模式》之合成模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...

随机推荐

  1. 【转】java原理—反射机制

    一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言 ...

  2. jumpserver 3.2修改排序规则

    在默认的情况下,我们使用jumpserver的时候 这里我使用xshell 客户端连接到堡垒机的时候, 这里我的显示规则是根据IP排序的,但是我这里的服务器的hostname 都是根据场景设置的hos ...

  3. MySql(十九):基础——自定义存储过程和函数

    MYSQL中创建存储过程和函数分别使用CREATE PROCEDURE和CREATE FUNCTION 使用CALL语句来调用存储过程,存储过程也可以调用其他存储过程 函数可以从语句外调用,能返回标量 ...

  4. Java数据结构和算法(六):前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  5. js正则表达式实现手机号码,密码正则验证

    手机号码,密码正则验证. 分享下javascript中正则表达式进行的格式验证,常用的有手机号码,密码等. /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,1 ...

  6. vue-webpack快速建立项目模板

  7. Android-优化UI性能(1)-降低主线程的堵塞时间

    Android-优化UI性能(1)-降低主线程的堵塞时间 一 降低主线程的堵塞时间 Android已经提供了AsyncTask实现从主线程生成新的异步任务的方法. 定义并实现以下的类就可以(方法由系统 ...

  8. hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别

    首先session是有一级缓存的,目的是为了减少查询数据库的时间,提高效率,一级缓存的生命周期和session是一样的, session.flush()和session.clear()就针对sessi ...

  9. Java中使用Oracle的客户端 load data和sqlldr命令执行数据导入到数据库中

    Windows环境下测试代码: import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundExcep ...

  10. [Windows Azure] Using the Graph API to Query Windows Azure AD

    Using the Graph API to Query Windows Azure AD 4 out of 4 rated this helpful - Rate this topic This d ...