Tpicture和Tbitmap哪个省资源些?(10分)

  • 主题发起人 主题发起人 zbsfg
  • 开始时间 开始时间
Z

zbsfg

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一本书上看到说TpicturE比Tbitmap消耗的资源要少,他作为一个技巧介绍给读者,今天一看帮助文档,TPICTURE不仅支持含有TBITMAP,还支持ICO和矢量图,那不更浪费资源吗?

这是我的想法,不知大家有没有做过测试,到底是哪个对资源要求少些??
 
TpicturE 是 Tbitmap 的属性之一,当然更小
 
有没有搞错,当然是 TBitmap 更小
 
呵呵,我个人认为还是Tbitmap 小
 
Tbitmap小,但小不了多少
 
象这类问题,
你可以通过查看其VCL代码,
查看其成员变量。
谁的成员变量多?谁的成员变量占的资源大?
应该就可以判断出来了。
 
TPicture contains a bitmap, icon, metafile graphic, or user-defined graphic.

TPicture.Bitmap
Specifies the contents of the picture object as a bitmap graphic (.BMP file format).
property Bitmap: TBitmap;
应该说TBITMAP是TPICTURE的一个子集
 
书上的话不可全信,况且国内很多写DELPHI书的人水平值的怀疑,,
TBitMap只支持BMP,他支持WIN的设备无关和相关的图象,TPicture
支持ICO,JPG,BMP,。。。。他内部包容了一个TBitMap再怎么也比
TBitMap消耗资源。[:D]
 
TBitmap 要小
 
继承关系如下:
TInterfacedPersistent
TGraphic
TBitmap
TIcon
TMetafile
TOleGraphic
TPicture
 
喝喝,这个问题也有得争论?

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.

能比出哪个节省资源吗?
 
那就是说说不清楚,那就有必要辩论一下,免得有些书误人子弟,你们说是吧?
 
通过InstanceSize只能看到这个类的声明在内存里占用的内存,
不能说明他一定就不InstanceSize大的节省资源, 比如一个类只有一个
PRIVATE成员,但是这个成员开了100M的内存,那么他绝对比一些
InstanceSize比他大的类消耗资源。
 
""来自:mstar, 时间:2003-9-29 21:51:00, ID:2208799
""TpicturE 是 Tbitmap 的属性之一,当然更小
这位家伙是从外太空来的吗? 在这误人子弟啊,呵呵(不要见怪啊,我也被骂的狗血临头的)
 
很显然:本身作用不同的两个类是不能比的,比如一个TPicture对象装了一个Icon对和一个TBitmap对象比资源吗?

>>>>>>>>>>>>>但是是不是真的TPicture比TBitmap所点的空间少呢?

>>>>>>>>>>>>>上面的代码可以看到:TPicture有一个成员FGraphic: TGraphic;这是个什么概念呢?TBitmap是TGraphic的派生类,也就是说TPicture的这个成员可能是一个TBitmap的实例,也就是说TPicture可能包含一个TBitmap.

>>>>>>>>>>>>>和TBitmap同属TGraphic的派生类的还有TMetafile,TIcon,以及TJpegImage.也就是说FGraphic可能是以上几种TGraphic派生类中的任意一种.

>>>>>>>>>>>>>也就是说TPicture是一个容器,它可能包含TBitmap,也可能包含TJpegImage.

>>>>>>>>>>>>>能比出哪个节省资源吗?




不能.
 
比如说创建一百个TPICTRUE实例和TBITMAP实例,各自加载100个1M的BMP图片,看看哪个占资源多些?我估计能看出来,我试试
 
TPicture与TBitmap用法不同,没法直接比较,但如果用TPicture来代替TBitmap的话,一定比
TBitmap消耗资源.除非你跳过TBitmap不用,自己实现TBitmap。aizb说的有道理。
 
同意aizb……
 

Similar threads

后退
顶部