📄 process.pas
字号:
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
End;
CloseFile(BMPFile);
If OutBMPName='~wbstego.tmp' Then Begin
FileCopy(OutBMPName,InBMPName);
StrPCopy(XChar,OutBMPName);
DeleteFile(XChar);
OutBMPName:=InBMPName;
End;
End;
End;
CloseFile(DataFile);
StrPCopy(XChar,temppath+'~wbstego.in');
DeleteFile(XChar);
end;
procedure TForm16.EncodeTXT;
var
TXTFile: File Of Byte;
NewTXT: File Of Byte;
Character: Byte;
DataFile: File Of Byte;
Data: Byte;
i: Byte;
BytePos: Longint;
Size: Longint;
begin
LAction.Caption:=ml.GetCodeString('Process',10);{'Encoding ...'; } // code010
Application.ProcessMessages;
AssignFile(DataFile,temppath+'~wbstego.in');
Reset(DataFile);
AssignFile(TXTFile,InBMPName);
Reset(TXTFile);
Size:=FileSize(TXTFile);
AssignFile(NewTXT,OutBMPName);
ReWrite(NewTXT);
BytePos:=0;
While Not(EOF(DataFile)) Do Begin
Read(DataFile,Data);
For i:=7 DownTo 0 Do Begin
Repeat
Read(TXTFile,Character);
Inc(BytePos);
If (Character<>$00) And (Character<>$20) Then Write(NewTXT,Character);
Until (Character=$00) Or (Character=$20);
If (Data And (1 Shl i)) = (1 Shl i) Then Character:=$20 Else Character:=$00;
Write(NewTXT,Character);
End;
Percent:=Trunc((BytePos/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
While Not(EOF(TXTFile)) Do Begin
Read(TXTFile,Character);
Write(NewTXT,Character);
Inc(BytePos);
Percent:=Trunc((BytePos/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
CloseFile(TXTFile);
CloseFile(NewTXT);
CloseFile(DataFile);
If OutBMPName='~wbstego.tmp' Then Begin
FileCopy(OutBMPName,InBMPName);
StrPCopy(XChar,OutBMPName);
DeleteFile(XChar);
OutBMPName:=InBMPName;
FID:=FileOpen(InBMPName,0);
FileSetDate(FID,DTStamp);
FileClose(FID);
End;
StrPCopy(XChar,temppath+'~wbstego.in');
DeleteFile(XChar);
end;
procedure TForm16.EncodeHTM;
var
HTMFile: File Of Byte;
NewHTM: File Of Byte;
Character: Byte;
Char2: Byte;
DataFile: File Of Byte;
Data: Byte;
i: Byte;
BytePos: Longint;
Size: Longint;
begin
LAction.Caption:=ml.GetCodeString('Process',11);{'Encoding ...'; } // code011
Application.ProcessMessages;
AssignFile(DataFile,temppath+'~wbstego.in');
Reset(DataFile);
AssignFile(HTMFile,InBMPName);
Reset(HTMFile);
Size:=FileSize(HTMFile);
AssignFile(NewHTM,OutBMPName);
ReWrite(NewHTM);
BytePos:=0;
While Not(EOF(DataFile)) Do Begin
Read(DataFile,Data);
Repeat
Read(HTMFile,Character);
Inc(BytePos);
If Character=$0D Then Begin
Repeat
Read(HTMFile,Char2);
Inc(BytePos);
If Char2=$0D Then Begin
Character:=$0D;
Write(NewHTM,Character);
End;
Until Char2<>$0D;
End
Else Begin
Write(NewHTM,Character);
Char2:=$00;
End;
Until (Character=$0D) And (Char2=$0A);
For i:=7 DownTo 0 Do Begin
If (Data And (1 Shl i)) = (1 Shl i) Then Character:=$09 Else Character:=$20;
Write(NewHTM,Character);
End;
Character:=$0D;
Write(NewHTM,Character);
Write(NewHTM,Char2);
Percent:=Trunc((BytePos/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
While Not(EOF(HTMFile)) Do Begin
Read(HTMFile,Character);
Write(NewHTM,Character);
Inc(BytePos);
Percent:=Trunc((BytePos/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
CloseFile(HTMFile);
CloseFile(NewHTM);
CloseFile(DataFile);
If OutBMPName='~wbstego.tmp' Then Begin
FileCopy(OutBMPName,InBMPName);
StrPCopy(XChar,OutBMPName);
DeleteFile(XChar);
OutBMPName:=InBMPName;
FID:=FileOpen(InBMPName,0);
FileSetDate(FID,DTStamp);
FileClose(FID);
End;
StrPCopy(XChar,temppath+'~wbstego.in');
DeleteFile(XChar);
end;
procedure TForm16.EncodePDF;
label
obj, endobj;
var
PDFFile: File Of Byte;
NewPDF: File Of Byte;
Character: Byte;
Char2: Byte;
DataFile: File Of Byte;
Data: Byte;
i: Byte;
BytePos: Longint;
Size: Longint;
LineFeed: Boolean;
InObjTag: Boolean;
TagStr: String;
begin
LineFeed:=False;
InObjTag:=False;
LAction.Caption:=ml.GetCodeString('Process',12);{'Encoding ...'}; // code012
Application.ProcessMessages;
AssignFile(DataFile,temppath+'~wbstego.in');
Reset(DataFile);
AssignFile(PDFFile,InBMPName);
Reset(PDFFile);
Size:=FileSize(PDFFile);
AssignFile(NewPDF,OutBMPName);
ReWrite(NewPDF);
BytePos:=0;
While Not(EOF(DataFile)) Do Begin
Read(DataFile,Data);
Repeat
LineFeed:=False;
Read(PDFFile,Character);
Inc(BytePos);
If (Character=$0D) And Not(InObjTag) Then Begin
LineFeed:=True;
End
Else Begin
If (InObjTag) Then Begin
If ((Character=Ord('e')) Or (Character=Ord('E'))) Then Begin
endobj:
TagStr:=Chr(Character);
Write(NewPDF,Character);
For i:=1 To 5 Do Begin
Read(PDFFile,Character);
Inc(BytePos);
TagStr:=TagStr+Chr(Character);
If ((Character=Ord('e')) Or (Character=Ord('E'))) Then goto endobj;
Write(NewPDF,Character);
End;
TagStr:=LowerCase(TagStr);
If TagStr='endobj' Then InObjTag:=False;
End
Else Begin
Write(NewPDF,Character);
Char2:=$00;
End;
End
Else Begin
If ((Character=Ord('o')) Or (Character=Ord('O'))) Then Begin
obj:
TagStr:=Chr(Character);
Write(NewPDF,Character);
For i:=1 To 2 Do Begin
Read(PDFFile,Character);
Inc(BytePos);
TagStr:=TagStr+Chr(Character);
If Character=$0D Then Begin
LineFeed:=True;
Break;
End
Else Begin
If ((Character=Ord('o')) Or (Character=Ord('O'))) Then goto obj;
Write(NewPDF,Character);
End;
End;
TagStr:=LowerCase(TagStr);
If TagStr='obj' Then InObjTag:=True;
End
Else Begin
Write(NewPDF,Character);
Char2:=$00;
End;
End;
End;
Until LineFeed;
For i:=7 DownTo 0 Do Begin
If (Data And (1 Shl i)) = (1 Shl i) Then Character:=$09 Else Character:=$20;
Write(NewPDF,Character);
End;
Character:=$0D;
Write(NewPDF,Character);
Percent:=Trunc((BytePos/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
While Not(EOF(PDFFile)) Do Begin
Read(PDFFile,Character);
Write(NewPDF,Character);
Inc(BytePos);
Percent:=Trunc((BytePos/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
CloseFile(PDFFile);
CloseFile(NewPDF);
CloseFile(DataFile);
If OutBMPName='~wbstego.tmp' Then Begin
FileCopy(OutBMPName,InBMPName);
StrPCopy(XChar,OutBMPName);
DeleteFile(XChar);
OutBMPName:=InBMPName;
FID:=FileOpen(InBMPName,0);
FileSetDate(FID,DTStamp);
FileClose(FID);
End;
StrPCopy(XChar,temppath+'~wbstego.in');
DeleteFile(XChar);
end;
procedure TForm16.DecodeBMP;
var
BytePos: Longint;
BitPos: Byte;
BMPFile: File Of Byte;
DataFile: File Of Byte;
Data: Byte;
CVal: Byte;
Size: Longint;
i: Longint;
fact: Longint;
begin
LAction.Caption:=ml.GetCodeString('Process',13);{'Decoding ...'; } // code013
ReadBMPHeader(InManName,Header);
Case Header.ColDepth Of
4: Begin
AssignFile(DataFile,temppath+'~wbstego.out');
ReWrite(DataFile);
AssignFile(BMPFile,InManName);
Reset(BMPFile);
Size:=0;
BytePos:=118;
For i:=0 To 2 Do Begin
Data:=0;
For BitPos:=3 Downto 0 Do Begin
Seek(BMPFile,BytePos);
Read(BMPFile,CVal);
If (CVal And $10)=$10 Then Data:=Data+(1 Shl (2*BitPos+1));
If (CVal And $01)=$01 Then Data:=Data+(1 Shl (2*BitPos));
Inc(BytePos);
End;
Case i Of
0: fact:=$00001;
1: fact:=$00100;
2: fact:=$10000;
End;
Size:=Size+Data*fact;
End;
For i:=1 To Size Do Begin
Data:=0;
For BitPos:=3 Downto 0 Do Begin
Seek(BMPFile,BytePos);
Read(BMPFile,CVal);
If (CVal And $10)=$10 Then Data:=Data+(1 Shl (2*BitPos+1));
If (CVal And $01)=$01 Then Data:=Data+(1 Shl (2*BitPos));
Inc(BytePos);
End;
Write(DataFile,Data);
Percent:=Trunc((((BytePos-118)/8)/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
CloseFile(DataFile);
CloseFile(BMPFile);
End;
8: Begin
AssignFile(DataFile,temppath+'~wbstego.out');
ReWrite(DataFile);
AssignFile(BMPFile,InManName);
Reset(BMPFile);
Size:=0;
BytePos:=1078;
For i:=0 To 2 Do Begin
Data:=0;
For BitPos:=7 Downto 0 Do Begin
Seek(BMPFile,BytePos);
Read(BMPFile,CVal);
If (CVal And $01)=$01 Then Data:=Data+(1 Shl BitPos);
Inc(BytePos);
End;
Case i Of
0: fact:=$00001;
1: fact:=$00100;
2: fact:=$10000;
End;
Size:=Size+Data*fact;
End;
For i:=1 To Size Do Begin
Data:=0;
For BitPos:=7 Downto 0 Do Begin
Seek(BMPFile,BytePos);
Read(BMPFile,CVal);
If (CVal And $01)=$01 Then Data:=Data+(1 Shl BitPos);
Inc(BytePos);
End;
Write(DataFile,Data);
Percent:=Trunc((((BytePos-1078)/8)/Size)*100);
LPercent.Caption:=IntToStr(Percent)+'%';
ProBar.Width:=Percent*2;
Application.ProcessMessages;
If ExitNow Then Break;
End;
CloseFile(DataFile);
CloseFile(BMPFile);
End;
24: Begin
AssignFile(DataFile,temppath+'~wbstego.out');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -