属性 |
类型 |
描述 |
public: |
|
|
TransparentColor |
TColor |
这个颜色的部分显示为透明,可读写属性。
如果 png 图像包含 Alpha 通道,这个属性无效;
如果 png 图像不包含 Alpha 通道,设置这个属性会引起 TransparencyMode 属性变为 ptmBit。 |
Scanline |
void * [const int Index] |
第 Index 行图像数据。读取 16 位像素数据的时候,Scanline 属性得到的是每个像素的前 8 位数据,ExtraScanline 属性得到的是每个像素的后 8 位数据。 |
ExtraScanline |
void * [const int Index] |
第 Index 行图像数据。读取 16 位像素数据的时候,Scanline 属性得到的是每个像素的前 8 位数据,ExtraScanline 属性得到的是每个像素的后 8 位数据。 |
PixelInformation |
TChunkpHYs * |
返回包含像素信息的块对象。如果 png 图像数据里面不包含像素信息块,读取这个属性会在 png 图像里面增加一个默认的像素信息块,所以需要使用 HasPixelInformation 方法来获取 PixelInformation 属性是否包含像素信息块的数据。 |
AlphaScanline |
pByteArray [const int Index] |
如果 png 图像包含 Alpha 通道,这个属性返回第 Index 行像素的 Alpha 值。 |
Canvas |
TCanvas |
png 图像的画布,可以通过这个画布来读取和修改 png 图像。 |
Header |
TChunkIHDR * |
png 图像的文件头信息。这个属性由 TPngImage 内部使用,不建议使用这个属性。 |
TransparencyMode |
TPNGTransparencyMode |
图像透明方式,只读属性。可用的值:
ptmNone: 不支持透明;
ptmBit: 指定透明部分的颜色。没有 Alpha 通道的 png 图像,使用 TransparentColor 属性指定透明部分的颜色;
ptmPartial: 支持半透明,png 图像包含 Alpha 通道。 |
Width |
int |
图像的宽度,可读写,单位:像素 (pixels)
可以用 SetSize 方法同时修改宽度和高度 |
Height |
int |
图像的高度,可读写,单位:像素 (pixels)
可以用 SetSize 方法同时修改宽度和高度 |
InterlaceMethod |
TInterlaceMethod |
隔行交错存储的方式,可读写属性,可用的值为:
imNone: 不使用隔行交错存储方式;
imAdam7: 使用 Adam7 算法。 |
Filters |
TFilters |
压缩生成 png 数据使用的过滤器,可读写属性,可用的值为:
pfNone: 不实用过滤器,直接存储每行数据;
pfSub: 使用 Sub algorithm
pfUp: 使用 Up algorithm
pfAverage: 使用 Average algorithm
pfPaeth: 使用 Paeth algorithm |
MaxIdatSize |
int |
图像数据块 (IDAT, image data chunk) 的最大容量,可读写属性。
这个属性在应用程序里面不使用,它控制可变的图像信息。 |
Empty |
bool |
是否包含图像数据,只读。如果不包含图像数据,此属性为 true. |
CompressionLevel |
TCompressionLevel |
压缩等级,可读写属性,范围:0 ~ 9。
0: 不压缩,9: 最大压缩率。 |
Chunks |
TPNGList |
png 图像数据块,TPngImage 内部使用的属性,不建议使用。 |
Pixels |
TColor [const int X][const int Y] |
图像 x, y 位置的像素的颜色,可读写属性。 |
Version |
UnicodeString |
支持 png 的版本,应用程序不要依赖这个版本号确定功能。 |
GammaTable |
StaticArray<System::Byte, 256> |
System::StaticArray<System::Byte, 256> GammaTable;
这是一个数据成员,TPngImage 内部使用的数据。 |
TGraphic:: |
|
从 TGraphic 继承过来的 |
Modified |
bool |
图像是否被修改过。如果被修改过,此属性为 true. |
Palette |
HPALETTE |
调色板句柄,可读写。如果图片没有或者不需要调色板,此值为 NULL |
PaletteModified |
bool |
调色板是否被修改过,如果被修改过,此属性值为 true. |
Transparent |
bool |
图像是否存在透明部分,可读写。 |
SupportsPartialTransparency |
bool |
是否支持半透明或 Alpha 通道,只读属性。 |
protected: |
|
|
InverseGamma |
StaticArray<System::Byte, 256> |
System::StaticArray<System::Byte, 256> InverseGamma;
这是一个数据成员,TPngImage 内部使用的数据。 |
BeingCreated |
bool |
bool BeingCreated;
这是一个数据成员,TPngImage 内部使用的数据。正在从文件或流读取和解析数据的时候,这个数据的值为 true. |
方法 |
描述 |
public: |
|
TPngImage |
__fastcall virtual TPngImage(void);
__fastcall TPngImage(unsigned ColorType, unsigned Bitdepth, int cx, int cy);
构造函数。
ColorType 和
Bitdepth 必须使用下面表格里面的数据,否则会抛出异常,cx 和 cy 为图像的宽度和高度。
ColorType |
Bitdepth |
Exception |
COLOR_GRAYSCALE, COLOR_RGB, COLOR_PALETTE,
COLOR_GRAYSCALEALPHA, COLOR_RGBALPHA |
1, 2, 4, 8, 16 |
否 |
COLOR_PALETTE |
16 |
是 |
COLOR_RGB |
<8 |
是 |
|
~TPngImage |
__fastcall virtual ~TPngImage(void);
析构函数。 |
Resize |
void __fastcall Resize(const int CX, const int CY);
改变 png 图像的大小为:宽度:CX,高度:CY |
CreateAlpha |
void __fastcall CreateAlpha(void);
给当前的 png 图像添加 Alpha 通道,新增的 Alpha 通道所有的 Alpha 值都初始化为 255,即完全不透明。 |
RemoveTransparency |
void __fastcall RemoveTransparency(void);
删除 png 图像的 Alpha 通道和数据。 |
AddtEXt |
void __fastcall AddtEXt(const System::AnsiString Keyword, const System::AnsiString Text);
给 png 图像的中继数据里面添加一对原文文字存储的关键字和关键字的值。 |
AddzTXt |
void __fastcall AddzTXt(const System::AnsiString Keyword, const System::AnsiString Text);
给 png 图像的中继数据里面添加一对压缩文字存储的关键字和关键字的值。 |
SaveToClipboardFormat |
virtual void __fastcall SaveToClipboardFormat(System::Word &AFormat, NativeUInt &AData, HPALETTE &APalette);
把当前的图像数据转为剪贴板格式的数据,可以把这些数据放入剪贴板。
【请参考 TBitmap 的例子:把位图放在剪贴板里面】 |
LoadFromClipboardFormat |
virtual void __fastcall LoadFromClipboardFormat(System::Word AFormat, NativeUInt AData, HPALETTE APalette);
从剪贴板加载图像数据,AFormat 为剪贴板数据格式,例如 CF_BITMAP,AData 为图像数据,APalette 为调色板句柄。【请参考 TBitmap 的例子:从剪贴板加载位图】 |
RaiseError |
void __fastcall RaiseError(System::Sysutils::ExceptClass ExceptionClass, System::UnicodeString Text);
产生一个错误异常,由 TPngImage 内部调用的,应用程序不要调用这个方法。 |
HasPixelInformation |
bool __fastcall HasPixelInformation(void);
获取 PixelInformation 属性是否包含像素信息块的数据。 |
DrawUsingPixelInformation |
void __fastcall DrawUsingPixelInformation(Vcl::Graphics::TCanvas* Canvas, const System::Types::TPoint &Point);
根据 PixelInformation 像素信息把 png 图像输出到画布。 |
Assign |
virtual void __fastcall Assign(System::Classes::TPersistent* Source);
把 Source 里面的图像数据赋值 (格式转换) 到当前图像。 |
AssignTo |
virtual void __fastcall AssignTo(System::Classes::TPersistent* Dest);
把当前图像数据赋值 (格式转换) 到 Dest 的图像数据。 |
AssignHandle |
void __fastcall AssignHandle(HBITMAP Handle, bool Transparent, unsigned TransparentColor);
把 Handle 句柄的位图数据拷贝到当前图像数据,如果 Transparent 为 true,图像的 TransparentColor 颜色的部分变为透明。 |
Draw |
virtual void __fastcall Draw(Vcl::Graphics::TCanvas* ACanvas, const System::Types::TRect &Rect);
把 png 图像输出到画布的 Rect 位置,使用透明选项,但是会忽略 PixelInformation 像素信息。
如果要使用像素信息,需要用 DrawUsingPixelInformation 方法。 |
LoadFromStream |
virtual void __fastcall LoadFromStream(System::Classes::TStream* Stream);
从流加载图像。 |
SaveToStream |
virtual void __fastcall SaveToStream(System::Classes::TStream* Stream);
把图像数据保存到流。 |
LoadFromResourceName |
void __fastcall LoadFromResourceName(NativeUInt Instance, const System::UnicodeString Name);
通过资源名称从资源里面加载图像。 |
LoadFromResourceID |
void __fastcall LoadFromResourceID(NativeUInt Instance, int ResID);
通过资源 ID 从资源里面加载图像。 |
TGraphic:: |
从 TGraphic 继承过来的 |
Equals |
virtual bool __fastcall Equals(System::TObject* Obj);
比较当前图像是否和 Obj 的图像数据相同。 |
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: |
|
InitializeGamma |
void __fastcall InitializeGamma(void);
TPngImage 内部调用的方法,应用程序不要调用。 |
GetSupportsPartialTransparency |
virtual bool __fastcall GetSupportsPartialTransparency(void);
返回是否支持半透明或 Alpha 通道。 |
GetPalette |
virtual HPALETTE __fastcall GetPalette(void);
返回调色板句柄。 |
SetPalette |
virtual void __fastcall SetPalette(HPALETTE Value);
调色板改为使用 Value 句柄的调色板。 |
DoSetPalette |
void __fastcall DoSetPalette(HPALETTE Value, const bool UpdateColors);
TPngImage 内部调用的方法,设置调色板的颜色,并且更新所有相关的数据。
应用程序可以用 Palette 属性访问调色板。 |
GetWidth |
virtual int __fastcall GetWidth(void);
返回图像的宽度,单位:像素 (pixels)。 |
GetHeight |
virtual int __fastcall GetHeight(void);
返回图像的高度,单位:像素 (pixels)。 |
SetWidth |
virtual void __fastcall SetWidth(int Value);
把图像宽度修改为 Value,单位:像素 (pixels) |
SetHeight |
virtual void __fastcall SetHeight(int Value);
把图像高度修改为 Value,单位:像素 (pixels) |
AssignPNG |
void __fastcall AssignPNG(TPngImage* Source);
TPngImage 内部调用的方法,把 Source 的数据都复制到当前图像数据。 |
GetEmpty |
virtual bool __fastcall GetEmpty(void);
返回图像数据是否为空。 |
GetHeader |
TChunkIHDR* __fastcall GetHeader(void);
Header 属性使用这个方法来获取数据。这个属性由 TPngImage 内部使用,不建议使用这个属性。 |
DrawPartialTrans |
void __fastcall DrawPartialTrans(HDC DC, const System::Types::TRect &Rect);
使用半透明属性把 png 图像输出到 DC,只有图像包含半透明数据,这个函数才可以工作。 |
GetTransparent |
virtual bool __fastcall GetTransparent(void);
返回图像是否存在透明部分。 |
GetPixels |
virtual System::Uitypes::TColor __fastcall GetPixels(const int X, const int Y);
返回 X, Y 位置的像素的颜色。 |
SetPixels |
virtual void __fastcall SetPixels(const int X, const int Y, const System::Uitypes::TColor Value);
把 X, Y 位置的像素的颜色设置为 Value |
TGraphic:: |
从 TGraphic 继承过来的 |
Changed |
virtual void __fastcall Changed(System::TObject* Sender);
当图像数据被修改的时候,会自动调用 Changed 方法。
Changed 方法会把 Modified 属性置为 true,并且触发 OnChange 事件。 |
DefineProperties |
virtual void __fastcall DefineProperties(System::Classes::TFiler* Filer);
重载 TPersistent 的 DefineProperties,用于 ReadData 和 WriteData 方法读写流图像数据。 |
Draw |
virtual void __fastcall Draw(TCanvas* ACanvas, const System::Types::TRect &Rect) = 0 ;
把当前图像数据显示到画布 ACanvas 的 Rect 位置。 |
DrawTransparent |
virtual void __fastcall DrawTransparent(TCanvas* ACanvas, const System::Types::TRect &Rect, System::Byte Opacity);
把当前图像数据显示到画布 ACanvas 的 Rect 位置,和画布 Rect 位置原来的显示内容混合在一起,Opacity 为混合的比例,用来实现图像的透明效果,即 Opacity 为图像不透明的程度。 |
Equals |
HIDESBASE virtual bool __fastcall Equals(TGraphic* Graphic)/* overload */;
比较当前图像是否和 Obj 的图像数据相同。 |
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 事件。 |
ReadData |
virtual void __fastcall ReadData(System::Classes::TStream* Stream);
从 Stream 里面读取图像数据。 |
SetTransparent |
virtual void __fastcall SetTransparent(bool Value);
设为是否需要把图像显示为透明。 |
WriteData |
virtual void __fastcall WriteData(System::Classes::TStream* Stream);
把图像数据写到 Stream 里面 |