喝喝,这个问题也有得争论?
TPicture = class(TPersistent)
private
FGraphic: TGraphic;
FOnChange: TNotifyEvent;
FNotify: IChangeNotifier;
FOnProgress: TProgressEvent;
..........
TBitmap = class(TGraphic)
private
FImage: TBitmapImage;
FCanvas: TCanvas;
FIgnorePalette: Boolean;
FMaskBitsValid: Boolean;
FMaskValid: Boolean;
FTransparentColor: TColor;
FTransparentMode: TTransparentMode;
..............
TGraphic = class(TPersistent)
private
FOnChange: TNotifyEvent;
FOnProgress: TProgressEvent;
FModified: Boolean;
FTransparent: Boolean;
FPaletteModified: Boolean;
...............
可见,TBitmap的成员变量比TPicture多许多.
再看:
ShowMessage(IntToStr(TPicture.InstanceSize)+':'+IntToStr(TBitmap.InstanceSize));
显示的结果是32:52,可见TPicture的实例所占空间是32个字节,而Bitmap成占的空间是52个字节.
但是是不是真的TPicture比TBitmap所点的空间少呢?
上面的代码可以看到:TPicture有一个成员FGraphic: TGraphic;这是个什么概念呢?TBitmap是TGraphic的派生类,也就是说TPicture的这个成员可能是一个TBitmap的实例,也就是说TPicture可能包含一个TBitmap.
和TBitmap同属TGraphic的派生类的还有TMetafile,TIcon,以及TJpegImage.也就是说FGraphic可能是以上几种TGraphic派生类中的任意一种.
也就是说TPicture是一个容器,它可能包含TBitmap,也可能包含TJpegImage.
能比出哪个节省资源吗?