C++ Builder 参考手册 ➙ System::Classes ➙ TPersistent ➙ Assign
头文件:#include <System.Classes.hpp>
命名空间:System::Classes
函数原型:
virtual void __fastcall Assign(TPersistent *Source);
System::Classes::TPersistent::Assign 是 System::Classes::TPersistent 的成员函数,把 Source 对象的所有的属性和数据赋值到当前对象,包括类型和格式转换再赋值。
参数:
Source:从 TPersistent 继承的对象,数据的来源。
返回值:
无
- 把 Source 指向的对象的所有的属性和数据都赋值到当前对象对应的属性和数据,包括格式转换之后再赋值;
- 如果 Source 为 NULL,会抛出 EConvertError 异常;
- 多数子类重载了 Assign 方法来实现功能,重载的 Assign 方法没有处理的内容需要调用父类的 Assign 方法来实现功能;
- 如果没有重载的 Assign 方法,TPersistent 的 Assign 方法调用了 Source 对象的 AssignTo 方法。
例:把 "d:\\test.jpg"
图片转成 png 格式保存为 "d:\\test.png"
。
jpg 和 png 之间进行格式转换的时候,中间需要经过 bmp,先把 jpg 转成 bmp,再把 bmp 转成 png,jpg ↔ bmp ↔ png 它们之间进行格式转换的时候可以用 Assign 方法。
#include <Vcl.Imaging.jpeg.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <memory>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try
{
std::auto_ptr<TJPEGImage> jpg(new TJPEGImage);
std::auto_ptr<TPngImage> png(new TPngImage);
std::auto_ptr<TBitmap> bmp(new TBitmap);
jpg->LoadFromFile(L"d:\\test.jpg");
bmp->Assign(jpg.get());
png->Assign(bmp.get());
png->SaveToFile(L"d:\\test.png");
}
catch(Exception &E)
{
ShowMessage(L"错误:" + E.Message);
}
}
参考:
- System::Classes::TPersistent::AssignTo
- System::Classes::TPersistent
- System::TObject::Equals
- System::TObject
- VCL 类继承关系
C++ Builder 参考手册 ➙ System::Classes ➙ TPersistent ➙ Assign