主页C++ Builder 资料C++ Builder 参考手册Pictures 图片TPicture
C++ Builder 串口控件
C++ Builder 编程技巧
C++ Builder 操作指南
C++ Builder 参考手册
基础知识
cfloat 浮点数
cmath 数学函数
cstdlib 标准库函数
System 字符串
System 日期和时间
System.Math.hpp 数学函数
其他数据类型
VCL 基础类
VCL 应用程序
Pictures 图片
 • TBitmap
 • TGIFImage
 • TGraphic
 • TIcon
 • TJPEGImage
 • TMetafile
 • TPicture
 • TPngImage
 • TWICImage
Graphics 绘图
Additional 控件
System 控件
A ~ Z 字母顺序排列的目录
网友留言/技术支持
TPicture

说明:

TPicture: 可以包含一个从 TGraphic 继承过来的图片,例如 TBitmapTGIFImageTIconTJPEGImageTPngImage

如果 TPicture 包含一个 TBitmap,Bitmap 属性为这个位图;
如果 TPicture 包含一个 TIcon,Icon 属性为这个图标;
如果 TPicture 包含一个 TMetafile,Metafile 属性为这个图片;
如果 TPicture 包含一个从 TGraphic 继承过来的图片,例如 TBitmapTGIFImageTIconTJPEGImageTPngImageTMetafile 等,Graphic 属性就是这个图片,可以用 dynamic_cast 转为对应类型的对象指针。

所以 Graphic 可以作为一个通用的属性,当需要显示的时候,只要把 Graphic 属性作为参数 Draw 或 StretchDraw 到画布上就可以了。

应用示例:jpg, png, bmp 转 gif 动画

 

头文件:

#include <Vcl.Graphics.hpp> (XE2 之后),#include <Graphics.hpp> (XE 之前)

 

继承关系:

TObjectTPersistentTInterfacedPersistentTPicture

 

属性:

属性 类型 描述
public:    
Bitmap TBitmap 如果 TPicture 包含的图片是 TBitmap 位图,这个属性就是这个位图,可读写属性。
Graphic TGraphic 如果 TPicture 包含一个从 TGraphic 继承过来的图片,例如 TBitmapTGIFImageTIconTJPEGImageTPngImageTMetafile 等,Graphic 属性就是这个图片,可读写属性,可以用 dynamic_cast 转为对应类型的对象指针。
PictureAdapter _di_IChangeNotifier 图片的 OLE 接口,可读写属性,是 TPicture 内部使用的属性。
Height int 图像的高度,只读属性,单位:像素 (pixels)。是图像没有经过任何处理的原始大小。
Icon TIcon 如果 TPicture 包含的图片是 TIcon 图标,这个属性就是这个图标,可读写属性。
Metafile TMetafile 如果 TPicture 包含的图片是 TMetafile 图片,这个属性就是这个图片,可读写属性。
Width int 图像的宽度,只读属性,单位:像素 (pixels)。是图像没有经过任何处理的原始大小。

 

方法:

方法 描述
public:  
TPicture __fastcall TPicture(void);
构造函数
~TPicture __fastcall virtual ~TPicture(void);
析构函数
LoadFromFile void __fastcall LoadFromFile(const System::UnicodeString Filename);
从文件加载图片。
SaveToFile void __fastcall SaveToFile(const System::UnicodeString Filename);
保存图片到文件。
LoadFromClipboardFormat void __fastcall LoadFromClipboardFormat(System::Word AFormat, NativeUInt AData, HPALETTE APalette);
从剪贴板加载图像数据,AFormat 为剪贴板数据格式,例如 CF_BITMAP,AData 为图像数据,APalette 为调色板句柄。【请参考 TBitmap 的例子:从剪贴板加载位图
SaveToClipboardFormat void __fastcall SaveToClipboardFormat(System::Word &AFormat, NativeUInt &AData, HPALETTE &APalette);
把当前的图像数据转为剪贴板格式的数据,可以把这些数据放入剪贴板。
【请参考 TBitmap 的例子:把位图放在剪贴板里面
SupportsClipboardFormat __classmethod bool __fastcall SupportsClipboardFormat(System::Word AFormat);
返回 AFormat 剪贴板格式是否支持用 LoadFromClipboardFormat 加载图片。
Assign virtual void __fastcall Assign(System::Classes::TPersistent* Source);
把 Source 里面的图像数据赋值 (格式转换) 到当前图像数据。
RegisterFileFormat __classmethod void __fastcall RegisterFileFormat(const System::UnicodeString AExtension, const System::UnicodeString ADescription, TGraphicClass AGraphicClass);
把一个新的从 TGraphic 继承的类和文件后缀的关联添加到 TPicture,这样 LoadFromFile 发现文件名是这个后缀的,就用这个类来解析和加载文件。
RegisterClipboardFormat __classmethod void __fastcall RegisterClipboardFormat(System::Word AFormat, TGraphicClass AGraphicClass);
把一个新的从 TGraphic 继承的类和剪贴板格式对应的关联添加到 TPicture,这样 LoadFromClipboardFormat 发现剪贴板里面是这个格式的,就用这个类来解析和加载剪贴板数据。
UnregisterGraphicClass __classmethod void __fastcall UnregisterGraphicClass(TGraphicClass AClass);
把一个从 TGraphic 继承的类和文件名后缀、剪贴板格式等的关联解除关系,从 TPicture 里面去掉。
RegisterFileFormatRes __classmethod void __fastcall RegisterFileFormatRes(const System::UnicodeString AExtension, int ADescriptionResID, TGraphicClass AGraphicClass);
把一个新的从 TGraphic 继承的类和文件后缀的关联添加到 TPicture,这样 LoadFromFile 发现文件名是这个后缀的,就用这个类来解析和加载文件。和 RegisterFileFormat 的不同点:这个函数的参数是从资源里面获取的,而不是直接给出字符串值。
protected:  
AssignTo virtual void __fastcall AssignTo(System::Classes::TPersistent* Dest);
把当前图像内容赋值 (格式转换) 到 Dest 的图像数据。
Changed DYNAMIC void __fastcall Changed(System::TObject* Sender);
当图像数据被修改的时候,会自动调用 Changed 方法。
Changed 方法会把 Modified 属性置为 true,并且触发 OnChange 事件。
DefineProperties virtual void __fastcall DefineProperties(System::Classes::TFiler* Filer);
提供把非 __published: 属性和数据存入流中,是从 TPersistent 继承过来并且重载了的方法。
如果子类需要这个功能,需要重载这个函数,在重载的 DefineProperties 需要调用父类的 DefineProperties,Filter 的 DefineProperty 和 DefineBinaryProperty。
Progress DYNAMIC void __fastcall Progress(System::TObject* Sender, TProgressStage Stage, System::Byte PercentDone, bool RedrawNow, const System::Types::TRect &R, const System::UnicodeString Msg);
当图像改变时 (加载、存储、转换的过程中),会调用这个方法来触发 OnProgress 事件。
LoadFromStream void __fastcall LoadFromStream(System::Classes::TStream* Stream);
从流加载图像。
SaveToStream void __fastcall SaveToStream(System::Classes::TStream* Stream);
把当前图像保存到流。

 

事件:

事件 描述
public:  
OnChange __property System::Classes::TNotifyEvent OnChange = {read=FOnChange, write=FOnChange};
• 当加载的图像发生变化时产生的事件,如果正在显示这个图片,需要刷新显示。
• 对于 gif 动画,需要显示下一帧的时候,会产生这个事件,需要在这个事件里面刷新显示
例:直接在画布上显示 gif 动画
OnProgress __property TProgressEvent OnProgress = {read=FOnProgress, write=FOnProgress};
当加载、存储、转换的过程中,会产生这个事件,表示这个过程的进度。

 

相关链接:

jpg, gif, png, bmp 之间的格式转换
bmp 转 gif 图片和动画
显示 gif 图片和动画
gif 的每一帧提取出来,每一帧存为一个 bmp 图片
屏幕截图

◤上一页:TMetafile下一页:TPngImage

C++ 爱好者 -- Victor Chen 的个人网站 www.cppfans.com 辽ICP备11016859号