![]() |
Brauche Hilfe beim Code erklären
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:
Was ich nich verstehe und nicht erklären kann ist wieso bei breite und höhe (-1) ist und den Teil :
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;
Delphi-Quellcode:
Wäre echt super nett, wenn jemand mit helfen würde !
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; |
AW: Brauche Hilfe beim Code erklären
Und zwar fängt ein Array der Länge 10 ja beim Index 0 an und hört bei 9 auf, daher das -1. Dann brauchst du es später bei den for-Schleifen nicht mehr machen. Und das Bild selbst ist halt ein zweidimensionales Array.
|
AW: Brauche Hilfe beim Code erklären
Zitat:
|
AW: Brauche Hilfe beim Code erklären
Zitat:
Verstehe noch das mit
Delphi-Quellcode:
nicht und wieso macht man denn das mod bzw wozu wird die gerade zahl benötigt?
bintext := strtobin(memo1.Text) + '0100000010001001'
|
AW: Brauche Hilfe beim Code erklären
Wenn ich das richtig sehe bedeutet das '0100000010001001' dass dein Text zu ende ist.
|
AW: Brauche Hilfe beim Code erklären
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz