📄 unit1.~pas
字号:
unit unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ExtDlgs, Buttons;
type
TFormCrypt = class(TForm)
ButtonLoad: TButton;
ButtonEncrypt: TButton;
ButtonDecrypt: TButton;
ButtonSave: TButton;
CheckBoxStretch: TCheckBox;
SavePictureDialog: TSavePictureDialog;
OpenPictureDialog: TOpenPictureDialog;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Panel1: TPanel;
ImageOriginal: TImage;
Panel2: TPanel;
ImageEncrypted: TImage;
Panel3: TPanel;
ImageDecrypted: TImage;
Panel4: TPanel;
Image1: TImage;
Panel5: TPanel;
Image2: TImage;
Panel6: TPanel;
Label6: TLabel;
Edit1: TEdit;
Edit2: TEdit;
procedure FormDestroy(Sender: TObject);
procedure FormMouseMove(Sender: TObject);
procedure ButtonLoadClick(Sender: TObject);
procedure ButtonEncryptClick(Sender: TObject);
procedure ButtonDecryptClick(Sender: TObject);
procedure CheckBoxStretchClick(Sender: TObject);
procedure EditSeedEncryptChange(Sender: TObject);
procedure EditSeedDecryptChange(Sender: TObject);
procedure EditNumericKeyPress(Sender: TObject; var Key: Char);
procedure ButtonSaveClick(Sender: TObject);
private
BitmapOriginal: TBitmap;
BitmapEncrypted: TBitmap;
procedure DecryptImage;
procedure EncryptImage;
public
{ Public declarations }
end;
var
FormCrypt: TFormCrypt;
implementation
{$R *.DFM}
uses
ShellAPI;
procedure TFormCrypt.FormMouseMove (Sender:TObject);
begin
FormCrypt.repaint;
FormCrypt.Canvas.pen.color:=clRed;
FormCrypt.Canvas.pen.width:=10;
FormCrypt.Canvas.polyline([point(0,0),point(FormCrypt.width-10,0),point(FormCrypt.width-10,FormCrypt.height-30),point(0,FormCrypt.height-30),point(0,0)]);
end;
procedure TFormCrypt.EncryptImage;
var
i: INTEGER;
j: INTEGER;
a: INTEGER;
b: INTEGER;
rowIn: pByteArray;
rowOut: pByteArray;
ScanlineByteCount: INTEGER;
begin
if (edit1.text='') or (edit2.text='')
then begin
showMessage('请输入密钥值') ;
exit;
end;
if Assigned(BitmapEncrypted)
then BitmapEncrypted.Free;
BitmapEncrypted := TBitmap.Create;
BitmapEncrypted.Width := BitmapOriginal.Width;
BitmapEncrypted.Height := BitmapOriginal.Height;
BitmapEncrypted.PixelFormat := BitmapOriginal.PixelFormat;
if BitmapOriginal.PixelFormat in [pf1bit, pf4bit, pf8bit]
then BitmapEncrypted.Palette := CopyPalette(BitmapOriginal.Palette);
ScanlineByteCount := ABS(Integer(BitmapOriginal.Scanline[1]) -
Integer(BitmapOriginal.Scanline[0]));
a:=strtoint(edit1.text) ;
b:=strtoint(edit2.text);
for j := 0 to BitmapOriginal.Height - 1 do
begin
RowIn := BitmapOriginal.Scanline[j];
RowOut := BitmapEncrypted.Scanline[j];
for i := 0 to ScanlineByteCount - 1 do
begin
rowout[i]:=(rowin[i]+b) mod 256;
end
end;
ImageEncrypted.Picture.Graphic := BitmapEncrypted;
ButtonDecrypt.Enabled := TRUE;
ButtonSave.Enabled := TRUE
end;
procedure TFormCrypt.DecryptImage;
var
BitmapDecrypted: TBitmap;
i: INTEGER;
j: INTEGER;
a: INTEGER;
b: INTEGER;
rowIn: pByteArray;
rowOut: pByteArray;
ScanlineByteCount: INTEGER;
begin
if (edit1.text='') or (edit2.text='')
then begin
showMessage('请输入密钥值') ;
exit;
end;
BitmapDecrypted := TBitmap.Create;
BitmapDecrypted.Width := BitmapEncrypted.Width;
BitmapDecrypted.Height := BitmapEncrypted.Height;
BitmapDecrypted.PixelFormat := BitmapEncrypted.PixelFormat;
if BitmapEncrypted.PixelFormat in [pf1bit, pf4bit, pf8bit]
then BitmapDecrypted.Palette := CopyPalette(BitmapEncrypted.Palette);
ScanlineByteCount := ABS(Integer(BitmapEncrypted.Scanline[1]) -
Integer(BitmapEncrypted.Scanline[0]));
a:=strtoint(edit1.text) ;
b:=strtoint(edit2.text);
for j := 0 to BitmapEncrypted.Height - 1 do
begin
RowIn := BitmapEncrypted.Scanline[j];
RowOut := BitmapDecrypted.Scanline[j];
for i := 0 to ScanlineByteCount - 1 do
begin
if (i mod 2 =0) then
begin
rowout[i]:=(rowin[i]-b) mod 256;
end
else then
begin
rowout[i]:=(rowin[i]-a) mod 256;
end
end;
ImageDecrypted.Picture.Graphic := BitmapDecrypted;
end;
procedure TFormCrypt.FormDestroy(Sender: TObject);
begin
BitmapOriginal.Free;
BitmapEncrypted.Free
end;
procedure TFormCrypt.ButtonLoadClick(Sender: TObject);
begin
if OpenPictureDialog.Execute
then begin
if Assigned(BitmapOriginal)
then BitmapOriginal.Free;
BitmapOriginal := TBitmap.Create;
BitmapOriginal.LoadFromFile(OpenPictureDialog.Filename);
ImageOriginal.Picture.Graphic := BitmapOriginal;
ButtonEncrypt.Enabled := TRUE;
end
end;
procedure TFormCrypt.ButtonEncryptClick(Sender: TObject);
begin
EncryptImage
end;
procedure TFormCrypt.ButtonDecryptClick(Sender: TObject);
begin
DecryptImage
end;
procedure TFormCrypt.CheckBoxStretchClick(Sender: TObject);
begin
ImageOriginal.Stretch := CheckBoxStretch.Checked;
ImageEncrypted.Stretch := CheckBoxStretch.Checked;
ImageDecrypted.Stretch := CheckBoxStretch.Checked
end;
procedure TFormCrypt.EditSeedEncryptChange(Sender: TObject);
begin
EncryptImage
end;
procedure TFormCrypt.EditSeedDecryptChange(Sender: TObject);
begin
DecryptImage
end;
procedure TFormCrypt.EditNumericKeyPress(Sender: TObject;
var Key: Char);
const
Backspace = #$08;
begin
if not (Key in [Backspace, '0'..'9'])
then Key := #$00
end;
procedure TFormCrypt.ButtonSaveClick(Sender: TObject);
begin
if SavePictureDialog.Execute
then BitmapEncrypted.SaveToFile(SavePictureDialog.Filename)
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -