主页C++ Builder 资料C++ Builder 参考手册Pictures 图片TJPEGImage
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 字母顺序排列的目录
网友留言/技术支持
TJPEGImage - jpg 图片处理,显示和格式转换

说明:

TJPEGImage: jpg 图片处理,显示和格式转换

 

头文件:

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

 

继承关系:

TObjectTPersistentTInterfacedPersistentTGraphicTJPEGImage

 

属性:

属性 类型 描述
public:    
Grayscale bool 是否灰度图像,可读写属性。
true: 为灰度图像 (256 级灰度的黑白图片),false: 是彩色图像。
这个属性可以优化解码速度,解码灰度数据要比解码彩色数据速度快。
ProgressiveEncoding bool 当图像数据编码输出到文件里面的时候,是否生成允许在解码显示的时候,可以显示解码进度的图像文件,可读写属性。如果生成文件的时候这个属性没有置为 true,那么 ProgressiveDisplay 属性即使设为 true 了也无法显示解码进度。
ProgressiveDisplay bool 当解压缩 (显示) 图片的时候,是否显示解压缩的进度。只用在 ProgressiveEncoding 属性为 true 的情况下生成的 jpg 图片,才可以用 ProgressiveDisplay 为 true 的情况下显示解压缩进度,否则 ProgressiveDisplay 的值会被忽略而不显示进度 (文件不具备这个功能)。
Smoothing bool 显示进度的效果,可读写属性。
只有当 ProgressiveDisplay 属性为 true 的时候,Smoothing 才会生效。
false: 显示进度为由马赛克效果到清晰的过程,
true: 显示进度为由平滑过渡的模糊效果到清晰的过程,
显示过程不同,最终结果都一样,都是完整的显示了图像。
CompressionQuality TJPEGQualityRange 生成 jpg 文件的图像品质,可读写属性,范围为 1 ~ 100。
100 为品质最好,压缩率最低,生成的文件最大;
1 为品质最差,压缩率最高,生成的文件最小;
这个属性的默认值为 90,很多 jpg 图片品质在 60 ~ 80 之间。
这个属性只影响生成 jpg 图片文件,不影响读取和显示。
PixelFormat TJPEGPixelFormat 像素格式,可读写属性,可用的值为:jf24Bit, jf8Bit。当解压缩 (显示) jpg 文件的时候,会使用 PixelFormat 属性,也会影响把 jpg 数据转为的 bmp 图片。
jf24Bit: 默认的,jpeg 图像的像素格式为 24 位;
jf8Bit: 当显示驱动不支持 24 位图像的时候,使用 8 位解码。
Performance TJPEGPerformance 解压缩 (显示) 的时候,优化的选项,可读写属性,可用的值为:
jpBestQuality: 品质优先;
jpBestSpeed: 速度优先;
这个属性只影响显示效果,不影响生成 jpg 文件的效果。
Scale TJPEGScale 影响显示的大小,可读写属性,只影响显示,不影响生成文件,可用的值为:
jsFullSize: 显示完整大小,正常的显示速度;
jsHalf: 显示 1/2 大小,2 倍显示速度;
jsQuarter: 显示 1/4 大小,4 倍显示速度;
jsEighth: 显示 1/8 大小,8 倍显示速度。
Canvas TCanvas 图片的画布,可以通过这个画布来读取和修改图片的数据。
TGraphic::   TGraphic 继承过来的
Empty bool 是否包含图像数据,只读。如果不包含图像数据,此属性为 true.
Height int 图像的高度,可读写,单位:像素 (pixels)
可以用 SetSize 方法同时修改宽度和高度
Modified bool 图像是否被修改过。如果被修改过,此属性为 true.
Palette HPALETTE 调色板句柄,可读写。如果图片没有或者不需要调色板,此值为 NULL
PaletteModified bool 调色板是否被修改过,如果被修改过,此属性值为 true.
Transparent bool 图像是否存在透明部分,可读写。
Width int 图像的宽度,可读写,单位:像素 (pixels)
可以用 SetSize 方法同时修改宽度和高度
SupportsPartialTransparency bool 是否支持半透明或 Alpha 通道,只读属性。
protected:    
Bitmap TBitmap * 可以返回内部处理的 jpg 未压缩的图像数据。
官方文档说明,TJPEGImage 类在内部处理图像的过程中会随时销毁和创建位图,并且没有任何事件或通知的方法,使得之前通过 Bitmap 属性获取到位图为无效的指针。

 

方法:

方法 描述
public:  
TJPEGImage __fastcall virtual TJPEGImage(void);
构造函数
~TJPEGImage __fastcall virtual ~TJPEGImage(void);
析构函数
Compress void __fastcall Compress(void);
强制进行压缩图像数据。当改变了与压缩和生成 jpg 文件相关的属性,例如 CompressionQuality 属性,这些属性的改变并没有立即让图像数据发生改变,而是在生成文件的时候利用这些属性进行压缩和生成文件。如果让这些属性立即生效,即立即压缩数据,可以调用 Compress 方法。
DIBNeeded void __fastcall DIBNeeded(void);
把 jpg 数据解压缩为位图,当需要位图数据,比如在显示图像时会调用这个函数。
JPEGNeeded void __fastcall JPEGNeeded(void);
生成 jpg 数据。当需要 jpg 数据的时候,比如 SaveToStream 会调用这个函数。
Assign virtual void __fastcall Assign(System::Classes::TPersistent* Source);
把 Source 里面的图像数据赋值 (或格式转换) 到当前图像数据。
LoadFromStream virtual void __fastcall LoadFromStream(System::Classes::TStream* Stream);
从流加载图像。
SaveToStream virtual void __fastcall SaveToStream(System::Classes::TStream* Stream);
把图像数据保存到流。
LoadFromClipboardFormat virtual void __fastcall LoadFromClipboardFormat(System::Word AFormat, NativeUInt AData, HPALETTE APalette);
从剪贴板加载图像数据,AFormat 为剪贴板数据格式,例如 CF_BITMAP,AData 为图像数据,APalette 为调色板句柄。【请参考 TBitmap 的例子:从剪贴板加载位图
SaveToClipboardFormat virtual void __fastcall SaveToClipboardFormat(System::Word &AFormat, NativeUInt &AData, HPALETTE &APalette);
把当前的图像数据转为剪贴板格式的数据,可以把这些数据放入剪贴板。
【请参考 TBitmap 的例子:把位图放在剪贴板里面
Equals inline bool __fastcall Equals(System::TObject* Obj)
{ return Vcl::Graphics::TGraphic::Equals(Obj); }
比较当前图像是否和 Obj 的图像数据相同。
TGraphic:: TGraphic 继承过来的
LoadFromFile virtual void __fastcall LoadFromFile(const System::UnicodeString Filename);
从文件加载图像。
SaveToFile virtual void __fastcall SaveToFile(const System::UnicodeString Filename);
把当前图像储存为文件。
SetSize virtual void __fastcall SetSize(int AWidth, int AHeight);
修改图像的大小为:宽度 = AWidth,高度 = AHeight,单位为像素 (pixels)
operator
_di_IStreamPersist()
operator System::Classes::_di_IStreamPersist()
{
  System::Classes::_di_IStreamPersist intf;
  this->GetInterface(intf);
  return intf;
}
类型转换操作符,转为 _di_IStreamPersist 类型。
protected:  
AssignTo virtual void __fastcall AssignTo(System::Classes::TPersistent* Dest);
把当前图像数据赋值 (格式转换) 到 Dest 的图像数据。
Changed virtual void __fastcall Changed(System::TObject* Sender);
当图像数据被修改的时候,会自动调用 Changed 方法。
Changed 方法会把 Modified 属性置为 true,并且触发 OnChange 事件。
Draw virtual void __fastcall Draw(Vcl::Graphics::TCanvas* ACanvas, const System::Types::TRect &Rect);
把当前图像数据显示到画布 ACanvas 的 Rect 位置。
Equals virtual bool __fastcall Equals(Vcl::Graphics::TGraphic* Graphic)/* overload */;
比较当前图像是否和 Obj 的图像数据相同。
FreeBitmap void __fastcall FreeBitmap(void);
释放内部位图资源,内部的位图变为无效。
GetEmpty virtual bool __fastcall GetEmpty(void);
返回图像数据是否为空。
GetHeight virtual int __fastcall GetHeight(void);
返回图像的高度,单位:像素 (pixels)。
GetPalette virtual HPALETTE __fastcall GetPalette(void);
返回调色板句柄。
GetWidth virtual int __fastcall GetWidth(void);
返回图像的宽度,单位:像素 (pixels)。
NewBitmap void __fastcall NewBitmap(void);
创建一个新的位图,用来存放未压缩的图像数据。NewBitmap 由 TJPEGImage 内部调用。
NewBitmap 会销毁原先的位图,替换为新的位图。
NewImage void __fastcall NewImage(void);
创建一个新的 jpg 数据对象,由 TJPEGImage 内部调用。
NewImage 会销毁原先的 jpg 数据对象,替换为新的 jpg 数据对象。
ReadData virtual void __fastcall ReadData(System::Classes::TStream* Stream);
从 Stream 里面读取图像数据。
ReadStream void __fastcall ReadStream(int Size, System::Classes::TStream* Stream);
从流里面读取 jpg 数据,替换原先的 jpg 数据,由 TJPEGImage 内部调用。
SetHeight virtual void __fastcall SetHeight(int Value);
把图像高度修改为 Value,单位:像素 (pixels)
SetPalette virtual void __fastcall SetPalette(HPALETTE Value);
调色板改为使用 Value 句柄的调色板。
SetWidth virtual void __fastcall SetWidth(int Value);
把图像宽度修改为 Value,单位:像素 (pixels)
WriteData virtual void __fastcall WriteData(System::Classes::TStream* Stream);
把图像数据写到 Stream 里面
TGraphic:: TGraphic 继承过来的
DefineProperties virtual void __fastcall DefineProperties(System::Classes::TFiler* Filer);
重载 TPersistent 的 DefineProperties,用于 ReadData 和 WriteData 方法读写流图像数据。
DrawTransparent virtual void __fastcall DrawTransparent(TCanvas* ACanvas, const System::Types::TRect &Rect, System::Byte Opacity);
把当前图像数据显示到画布 ACanvas 的 Rect 位置,和画布 Rect 位置原来的显示内容混合在一起,Opacity 为混合的比例,用来实现图像的透明效果,即 Opacity 为图像不透明的程度。
GetTransparent virtual bool __fastcall GetTransparent(void);
返回图像是否存在透明部分。
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 事件。
SetTransparent virtual void __fastcall SetTransparent(bool Value);
设为是否需要把图像显示为透明。
GetSupportsPartialTransparency virtual bool __fastcall GetSupportsPartialTransparency(void);
返回是否支持半透明或 Alpha 通道。

 

事件:

事件 描述
public:  
TGraphic:: TGraphic 继承过来的
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 图片
屏幕截图

◤上一页:TIcon下一页:TMetafile

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