Hallo Delphi-Praxis,
brauche unbedingt eure Hilfe und zwar habe ich eine Klausur verhauen in Delphi und nun soll ich morgen ein Programm, welches ich bekommen habe, vor der Klasse präsentieren und erklären um meine Note zu verbessern. Es handelt sich um ein Programm, welches Texte in einem Bild verstecken soll, die man dann wieder auslesen kann(Bitmanipulation oder Steganographie). Dabei sollen in einer .bmp nur die letzten beiden Bits manipuliert werden. Wir sind 3 Leute und mein Part ist das Verstecken im Bild. Nun habe ich folgenden Code und auch schon einige Kommentare dazu.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var hoehe, breite, x, y:integer;
R, G, B, bintext:
string;
farbe:longint;
begin
breite := form1.image1.Width - 1;
hoehe := form1.Image1.Height - 1;
bintext := strtobin(memo1.Text) + '
0100000010001001';
//At Promill (abbruchbedingung)
if length(bintext)
mod 3 <> 0
then
repeat
bintext := bintext + '
0'
until
length(bintext)
mod 6 = 0;
if ceil(length(bintext)/ 3) <= form1.Image1.Height * form1.Image1.Width
then //überprüfung ob der text in das bild passt
for y := 0
to hoehe
do //schleife um die y-achse durch zu gehen
begin
for x := 0
to breite
do //schleife um die x-achse durch zu gehen
begin
farbe := colortorgb(form1.Image1.Canvas.Pixels[x,y]);
//dier farbwerte des aktuellen pixels wird ermittelt
R := bytetobin(getRvalue(farbe));
//der rot anteil wird herausgefiltert und in eine binärzahl umgewandelt
R[7] := bintext[1];
//das vorletzte bit wird geändert
R[8] := bintext[2];
//das letzte bit wird geändert
delete(bintext, 1, 2);
//die geschriebenen bits werden abgeschnitten
G := bytetobin(getGvalue(farbe));
//der grün anteil wird herausgefiltert und in eine binärzahl umgewandelt
G[7] := bintext[1];
//das vorletzte bit wird geändert
G[8] := bintext[2];
//das letzte bit wird geändert
delete(bintext, 1, 2);
//die geschriebenen bits werden abgeschnitten
B := bytetobin(getBvalue(farbe));
//der blau anteil wird herausgefiltert und in eine binärzahl umgewandelt
B[7] := bintext[1];
//das vorletzte bit wird geändert
B[8] := bintext[2];
//das letzte bit wird geändert
delete(bintext, 1, 2);
//die geschriebenen bits werden abgeschnitten
form1.Image1.Canvas.Pixels[x,y] :=
rgb(bintobyte(R), bintobyte(G), bintobyte(B));
//die geänderten farbwerte werden gemalt
if bintext = '
'
then //wenn keine zeichem mehr vorhanden sind...
begin
form2.Visible := false;
//ausblenden der texteingabe
exit;
//abbruch der schleifen
end;
end;
end;
end;
Was ich nich verstehe und nicht erklären kann ist wieso bei breite und höhe (-1) ist und den Teil :
Delphi-Quellcode:
bintext := strtobin(memo1.Text) + '0100000010001001'; //At Promill (abbruchbedingung)
if length(bintext) mod 3 <> 0 then
repeat
bintext := bintext + '0'
until
length(bintext) mod 6 = 0;
Wäre echt super nett, wenn jemand mit helfen würde !