GDI+以前只是听说过,还没怎么用过,这段时间用了用,觉得挺好用的.在这里总结一下.留个备忘. 
GDI+(Graphics Device Interface plus)是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。由于它是图形绘制相关的接口,那先了解一下常用的几种图片格式.

常见的图片格式

常见的图片格式有JPEG, BMP, PNG. 
JPEG:它用有损压缩方式去除冗余的图像或彩色数据, 获取得极高的压缩率的同时展现了十分丰富生动的图像.应用最为广泛.引用JPEG单元, 通TJPEGimage类进行读取. 
BMP:它是bitmap(位图)的简称, 它是window操作系统中标准图像文件格式,能够被多种window应用程序支持,特点在于包含的图像信息丰富,几乎不进行压缩, 但是因为这个,它占用的空间比较大.Delphi里TImage里需要的格式就是BMP.引用Graphics单元, 通过TBitmap进行读取. 
PNG: 它是新兴的网络图像格式, 是目前最不失真的格式, 相对于除BMP格式外.需要提到的它支持透明图像的制作.这样就可以实现在图像上加水印的功能.引用pngImage单元, 通过TPNGImage类可以加载PNG图像.

不同图片格式的转换

PNG转换成Bitmap

var
oBitMap: TBitMap;
oPNG: TPNGImage;
begin
strFileName := '1.png';
oBitMap := TBitMap.Create;
oPNG := TPNGImage.Create;
try
oPng.LoadFromFile(strFileName);
oBitMap.Width := 100;
oBitMap.Height := 200;
oBitMap.Canvas.Draw(0, 0, oPng);
finally
oBitMap.Free;
oPng.Free;
end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

BMP转换成IStream

  oBitMap := TBitMap.Create;
try
oBitmap.loadFromFile('1.bmp');
oStream := TMemoryStream.Create;
try
oBitmap.SaveToStream(oStream);
oStream.Position := 0;
oStreamAdapter := TStreamAdapter.Create(oStream);
// do something
finally
oStream.free;
oStreamAdapter := nil; //需要注意,不能直接Free, 是接口,带有引用计数
end;
finally
oBitmap.free;
end;

GDI+的基本用法

引用GDIPOBJGDIPAPI这两个单元, 需要在开始之前需要调用调用初始化方法, 主要是加载dll及初始化相关的方法. 
基本用法如下:

  oImage1 := TGPImage.Create('Photo_1.jpg');
oImage2 := TGPImage.Create('Photo_2.jpg');
oImage3 := TGPImage.Create('Photo_3.jpg');
oImage4 := TGPImage.Create('Photo_4.jpg');
g1 := TGPGraphics.Create(image1.Canvas.Handle);
g1.DrawImage(oImage1, 0, 0, oImage1.GetWidth, oImage1.GetHeight);
g1.DrawImage(oImage2, oImage1.GetWidth, 0, oImage2.GetWidth, oImage2.GetHeight);
g1.DrawImage(oImage3, 0, oImage1.GetHeight, oImage3.GetWidth, oImage3.GetHeight);
g1.DrawImage(oImage4, oImage1.GetWidth, oImage1.GetHeight, oImage4.GetWidth, oImage4.GetHeight);

上面的代码相当于是把四幅图画在一幅图上.其它的一些用法参考TGPGraphics相关接口.

http://blog.csdn.net/hpjx1987/article/details/51056978

Delphi GDI+基本用法总结的更多相关文章

  1. (转载)Delphi TStringList的用法

    Delphi TStringList的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. TStringList 常用方法与属性: var List: TStringL ...

  2. Delphi GDI+ Library

    GDI+ LibraryThis library enables GDI+ functionality for Delphi 2009 and later. It differs from other ...

  3. Delphi TStringList的用法

    Delphi TStringList的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. TStringList 常用方法与属性: var List: TStringL ...

  4. Delphi Inputbox,InputQuery用法

    Delphi :InputQuery,InputBox用法及区别 function InputQuery(const ACaption, APrompt: string; var Value: str ...

  5. Delphi XE4 TStringHelper用法详解

    原文地址:Delphi XE4 TStringHelper用法详解作者:天下为公 Delphi XE4的TStringHelper,对操作字符串进一步带来更多的方法,估计XE5还能继续用到. Syst ...

  6. delphi FillChar的用法(转)

    delphi FillChar的用法(转) (2012-12-24 15:12:06) 转载▼ 标签: it 分类: delphi7 FillChar的用法(delphi) Fillchar是Turb ...

  7. Delphi GDI+ 安装方法

    [转]Delphi GDI+ 安装方法转自:万一博客(http://www.cnblogs.com/del/)GDI+ 是 Windows 的一个函数库, 来自 Windows\System32\GD ...

  8. Delphi GDI(一)

    Delphi 7下IGDIPlus库的使用 IGDI+是一个免费开源封装微软GDI+功能的Delphi库,该库使得可以用Delphi语言代码快速简短的实现复杂GDI+应用程序. 官方网站:http:/ ...

  9. Delphi常用关键字用法详解

    本文详细介绍了Delphi中常用的各个关键字名称及用法,供大家在编程过程中借鉴参考之用.详情如下: absolute: ? 1 2 3 4 5 6 7 8 9 10 //它使得你能够创建一个新变量, ...

随机推荐

  1. Windows Azure入门教学:使用Blob Storage

    对于.net开发人员,这是一个新的领域,但是并不困难.本文将会介绍如何使用Blob Storage.Blob Storage可以看做是云端的文件系统.与桌面操作系统上不同,我们是通过REST API来 ...

  2. 解决IllegalStateException: Can not perform this action after onSaveInstanceState:

    今天做项目中的支付宝功能,是在fragment中做的,在支付成功后,想切换到支付成功的页面. 结果就报错了IllegalStateException: Can not perform this act ...

  3. SQL SERVER 主键约束

    主键约束: 遵循关系型模型中的第二范式.唯一的识别一条记录,不能为空. CREATE TABLE Persons ( Id_P int NOT NULL PRIMARY KEY, LastName v ...

  4. 编译个性化的openwrt固件

    基本流程是:下载openwrt源码(推荐attitude adjustment版本).执行feeds更新.make menuconfig(通过配置feed.conf.default和menuconfi ...

  5. android开发 锁屏 真正的锁屏,是go锁屏那种。

    想做个锁屏界面很久了,最近一周,历经千辛万苦,越过种种挫折,终于完美实现了这一要求,在此将锁屏思路分享出来. 注意:这不是什么一键锁屏,是类似“go锁屏”那样的锁屏界面. 准备:本程序共需要 两个ac ...

  6. 无限大整数相加算法的C语言源代码

    忙里偷闲,终于完成了无限大整数相加算法的C语言代码,无限大整数相加算法的算法分析在这里. 500位的加法运行1000次,不打印结果的情况下耗时0.036秒,打印结果的情况下耗时16.285秒. 下面是 ...

  7. 如何在浏览器网页中实现java小应用程序的功能

    我们知道,java语言的运用就是面向对象实现功能,和c不同,java语言对于程序员来说,运用起来更为简便. 小应用程序与应用程序不同,小应用程序只能在与Java兼容的容器中运行,可以嵌入在HTML网页 ...

  8. Html5 js FileReader接口

    用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据.到目前文职,只有FF3.6+和Chrome6 ...

  9. 2016.7.2this的应用

    this有三个应用: 1.就是在类的方法中参数与成员参数重名了,那么用this.参数名=参数名来区分它们: 2.当一个引用对象要调用另一个已经有具体实例的引用对象,那么通过在类的定义中后面加publi ...

  10. C++成员变量初始化顺序问题

    由于面试题中,考官出了一道简单的程序输出结果值的题:如下, class A { private: int n1; int n2; public: A():n2(0),n1(n2+2){} void P ...