⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmputils.pas

📁 wbs43open-src.zip 数字隐藏工具
💻 PAS
字号:
unit BMPUtils;

interface

   uses Classes;

   type
     TBitmapFileHeader = class
       BM:           String[2];
       Size:         Longword;
       Offset:       Longword;
       procedure Read(str: TStream; Offset: Longint);
       procedure Write(str: TStream; Offset: Longint);
     end;
     TBitmapInfoHeader = class
       Size:         Longword;
       Height:       Integer;
       Width:        Integer;
       Planes:       Word;
       BitCount:     Word;
       Compression:  Longword;
       SizeImage:    Longword;
       XPels:        Integer;
       YPels:        Integer;
       ClrUsed:      Longword;
       ClrImp:       Longword;
       procedure Read(str: TStream; Offset: Longint);
       procedure Write(str: TStream; Offset: Longint);
     end;

implementation

   // TBitmapFileHeader

   procedure TBitmapFileHeader.Read(str: TStream; Offset: Longint);
   var
     Buffer:   Array[0..13] of Byte;
   begin
     str.Seek(Offset,soFromBeginning);
     str.Read(Buffer,14);
     BM:='..';
     BM[1]:=Chr(Buffer[0]);
     BM[2]:=Chr(Buffer[1]);
     Size:=Buffer[2]+$100*Buffer[3]+$10000*Buffer[4]+$1000000*Buffer[5];
     self.Offset:=Buffer[10]+$100*Buffer[11]+$10000*Buffer[12]+$1000000*Buffer[13];
   end;

   procedure TBitmapFileHeader.Write(str: TStream; Offset: Longint);
   var
     Buffer:   Array[0..13] of Byte;
   begin
     Buffer[0]:=Ord(BM[1]);
     Buffer[1]:=Ord(BM[2]);
     Buffer[2]:=Size and $000000FF;
     Buffer[3]:=(Size and $0000FF00) shr 8;
     Buffer[4]:=(Size and $00FF0000) shr 16;
     Buffer[5]:=(Size and $FF000000) shr 24;
     Buffer[6]:=0;
     Buffer[7]:=0;
     Buffer[8]:=0;
     Buffer[9]:=0;
     Buffer[10]:=self.Offset and $000000FF;
     Buffer[11]:=(self.Offset and $0000FF00) shr 8;
     Buffer[12]:=(self.Offset and $00FF0000) shr 16;
     Buffer[13]:=(self.Offset and $FF000000) shr 24;
     str.Seek(Offset,soFromBeginning);
     str.Write(Buffer,14);
   end;

   // TBitmapInfoHeader

   procedure TBitmapInfoHeader.Read(str: TStream; Offset: Longint);
   var
     Buffer:   Array[0..39] of Byte;
   begin
     str.Seek(Offset,soFromBeginning);
     str.Read(Buffer,40);
     Size:=Buffer[0]+$100*Buffer[1]+$10000*Buffer[2]+$1000000*Buffer[3];
     Width:=Buffer[4]+$100*Buffer[5]+$10000*Buffer[6]+$1000000*Buffer[7];
     Height:=Buffer[8]+$100*Buffer[9]+$10000*Buffer[10]+$1000000*Buffer[11];
     Planes:=Buffer[12]+$100*Buffer[13];
     BitCount:=Buffer[14]+$100*Buffer[15];
     Compression:=Buffer[16]+$100*Buffer[17]+$10000*Buffer[18]+$1000000*Buffer[19];
     SizeImage:=Buffer[20]+$100*Buffer[21]+$10000*Buffer[22]+$1000000*Buffer[23];
     XPels:=Buffer[24]+$100*Buffer[25]+$10000*Buffer[26]+$1000000*Buffer[27];
     YPels:=Buffer[28]+$100*Buffer[29]+$10000*Buffer[30]+$1000000*Buffer[31];
     if Size>=40 then begin
       ClrUsed:=Buffer[32]+$100*Buffer[33]+$10000*Buffer[34]+$1000000*Buffer[35];
       ClrImp:=Buffer[36]+$100*Buffer[37]+$10000*Buffer[38]+$1000000*Buffer[39];
     end
     else begin
       ClrUsed:=0;
       ClrImp:=0;
     end;
   end;

   procedure TBitmapInfoHeader.Write(str: TStream; Offset: Longint);
   var
     Buffer:        Array[0..39] of Byte;
   begin
     Buffer[0]:=Size and $000000FF;
     Buffer[1]:=(Size and $0000FF00) shr 8;
     Buffer[2]:=(Size and $00FF0000) shr 16;
     Buffer[3]:=(Size and $FF000000) shr 24;
     Buffer[4]:=Width and $000000FF;
     Buffer[5]:=(Width and $0000FF00) shr 8;
     Buffer[6]:=(Width and $00FF0000) shr 16;
     Buffer[7]:=(Width and $FF000000) shr 24;
     Buffer[8]:=Height and $000000FF;
     Buffer[9]:=(Height and $0000FF00) shr 8;
     Buffer[10]:=(Height and $00FF0000) shr 16;
     Buffer[11]:=(Height and $FF000000) shr 24;
     Buffer[12]:=Planes and $00FF;
     Buffer[13]:=(Planes and $FF00) shr 8;
     Buffer[14]:=BitCount and $00FF;
     Buffer[15]:=(BitCount and $FF00) shr 8;
     Buffer[16]:=Compression and $000000FF;
     Buffer[17]:=(Compression and $0000FF00) shr 8;
     Buffer[18]:=(Compression and $00FF0000) shr 16;
     Buffer[19]:=(Compression and $FF000000) shr 24;
     Buffer[20]:=SizeImage and $000000FF;
     Buffer[21]:=(SizeImage and $0000FF00) shr 8;
     Buffer[22]:=(SizeImage and $00FF0000) shr 16;
     Buffer[23]:=(SizeImage and $FF000000) shr 24;
     Buffer[24]:=XPels and $000000FF;
     Buffer[25]:=(XPels and $0000FF00) shr 8;
     Buffer[26]:=(XPels and $00FF0000) shr 16;
     Buffer[27]:=(XPels and $FF000000) shr 24;
     Buffer[28]:=YPels and $000000FF;
     Buffer[29]:=(YPels and $0000FF00) shr 8;
     Buffer[30]:=(YPels and $00FF0000) shr 16;
     Buffer[31]:=(YPels and $FF000000) shr 24;
     Buffer[32]:=ClrUsed and $000000FF;
     Buffer[33]:=(ClrUsed and $0000FF00) shr 8;
     Buffer[34]:=(ClrUsed and $00FF0000) shr 16;
     Buffer[35]:=(ClrUsed and $FF000000) shr 24;
     Buffer[36]:=ClrImp and $000000FF;
     Buffer[37]:=(ClrImp and $0000FF00) shr 8;
     Buffer[38]:=(ClrImp and $00FF0000) shr 16;
     Buffer[39]:=(ClrImp and $FF000000) shr 24;
     str.Seek(Offset,soFromBeginning);
     str.Write(Buffer,40);
   end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -