加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 从TImage32(Graphics32库)中删除垃圾DFM数据

发布时间:2020-12-15 09:29:51 所属栏目:大数据 来源:网络整理
导读:我有一个源自T Image32的控件: TChromaDisplay = class(TImage32) 一切都很好,除了当我在表单上放下TChromaDisplay时,生成的DFM文件很大(300KB而不是1KB),因为我在Bitmap.Data字段中保存了垃圾数据(它只是一个灰色图像).每次我将控件放在窗体上时,都会创建
我有一个源自T Image32的控件:

TChromaDisplay = class(TImage32)

一切都很好,除了当我在表单上放下TChromaDisplay时,生成的DFM文件很大(300KB而不是<1KB),因为我在Bitmap.Data字段中保存了垃圾数据(它只是一个灰色图像).每次我将控件放在窗体上时,都会创建位图图像并填充灰色.我不想将图像(垃圾)的内容保存到DFM文件,因为它使EXE更大但我不知道如何. 可能我需要在TChromaDisplay.Create中写一些地方,我没有保存/存储在我的TChromaDisplay中的任何图像数据.但我不知道在哪里/怎么做.

object Display: TChromaDisplay
    Left = 0
    Top = 0
    Width = 1465
    Height = 246
    Bitmap.Data = {
      C0000000C0000000EBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFF
      EBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFF
      EBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFF
      etc
      etc
      etc

我在Create中试过这个但是没有帮助:

Bitmap.Width := 1;
Bitmap.Height:= 1;

解决方法

更新:

查看TImage32.Bitmap属性的设计时图像对话框GR32_Dsgn_Bitmap.pas,其中的Clear按钮使用了Bitmap.Delete过程,只是将位图大小设置为0x0.因此,您可以尝试在保存表单流之前调用它来清除位图:

type
  TChromaDisplay = class(TImage32)
  protected
    procedure WriteState(Writer: TWriter); override;
  end;

implementation

procedure TChromaDisplay.WriteState(Writer: TWriter);
begin
  Bitmap.Delete;
  inherited;
end;

但是,当您在窗体上放置控件时,它仍然无法解释为什么您有位图数据.在继承部分完成后(当Bitmap已经实例化时),您也可以在控件构造函数中调用Bitmap.Delete.

仍然没有经过测试,因为我无法模拟你的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读