📄 bmputils.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 + -