Einzelnen Beitrag anzeigen

Berserker89

Registriert seit: 24. Jun 2010
2 Beiträge
 
Delphi 2 Desktop
 
#1

Brauche Hilfe beim Code erklären

  Alt 24. Jun 2010, 16:50
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 !
  Mit Zitat antworten Zitat