AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Brauche Hilfe beim Code erklären

Ein Thema von Berserker89 · begonnen am 24. Jun 2010 · letzter Beitrag vom 25. Jun 2010
Antwort Antwort
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
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Brauche Hilfe beim Code erklären

  Alt 24. Jun 2010, 17:06
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

AW: Brauche Hilfe beim Code erklären

  Alt 24. Jun 2010, 19:34
Und zwar fängt ein Array der Länge 10 ja beim Index 0 an und hört bei 9 auf, daher das -1.
Das gilt zwar nur für dynamische Arrays, aber die Kernaussage stimmt schon. Das linke obere Pixel des Image hat den Index [0,0] und das rechte untere den Index[Width - 1, Height - 1]. Und was verstehst Du am restlichen Code nicht? MOD gibt Dir den Rest bei ganzzahliger Division zurück, d.h. Du kannst damit ermitteln, ob eine Zahl durch eine andere Zahl glatt teilbar ist. Das soll als Hilfe aber genügen
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Berserker89

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

AW: Brauche Hilfe beim Code erklären

  Alt 24. Jun 2010, 20:36
Und zwar fängt ein Array der Länge 10 ja beim Index 0 an und hört bei 9 auf, daher das -1.
Das gilt zwar nur für dynamische Arrays, aber die Kernaussage stimmt schon. Das linke obere Pixel des Image hat den Index [0,0] und das rechte untere den Index[Width - 1, Height - 1]. Und was verstehst Du am restlichen Code nicht? MOD gibt Dir den Rest bei ganzzahliger Division zurück, d.h. Du kannst damit ermitteln, ob eine Zahl durch eine andere Zahl glatt teilbar ist. Das soll als Hilfe aber genügen
Vielen Dank für eure Hilfe !
Verstehe noch das mit bintext := strtobin(memo1.Text) + '0100000010001001' nicht und wieso macht man denn das mod bzw wozu wird die gerade zahl benötigt?
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Brauche Hilfe beim Code erklären

  Alt 24. Jun 2010, 22:55
Wenn ich das richtig sehe bedeutet das '0100000010001001' dass dein Text zu ende ist.
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Brauche Hilfe beim Code erklären

  Alt 25. Jun 2010, 09:31
Zitat:
nun soll ich morgen ein Programm, welches ich bekommen habe
Zitat:
Nun habe ich folgenden Code und auch schon einige Kommentare dazu.
Wenn einer der anderen aus dem Team den Code verfasst hat wäre es doch das einfachste gewesen denjenigen zu fragen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz