Einzelnen Beitrag anzeigen

Saminem

Registriert seit: 18. Aug 2010
14 Beiträge
 
#4

AW: verschlüsseln

  Alt 11. Nov 2010, 18:11
Sry habe mein Problem nicht gut erklärt.
Erst mal zu mir bin 16 Jahre alt und gehe auf ein Gymnasium(Oberstufe 11).
Nun haben wir in Informatik den Arbeitsauftrag gekriegt einen Text in einem Bild zu verstecken.
Unser Lehrer hat uns gesagt wie wir das ungefähr machen sollen im Delphi Code kommentiert(hoffe verständlich).
Nun sollten wir den Text wieder aus dem Bild rauskriegen.
Und da habe ich Probleme mit.
Deswegen kann ich auch nicht kontrollieren ob ich das Richtige verstecke.
Hier schon mal die Procedure zum "verstecken" so hab ich es jetzt genant.
Und vorher nochmal bitte nicht so was (für euch zwar nicht aber für mich) kompliziertes ändern(mein erstes Jahr mit Delphi,
10 fast nur Scratch und Excell nur wenige stunden Delphi) und wenn doch bitte immer mit Kommentaren.
Delphi-Quellcode:
procedure TForm1.verstecken;
var y,m,x,f,g,len:integer; //f und g Variabel zum shr; y und x Position im Bild; m Variabel position im Memo;len länge memo
    P1:pbytearray; // P1 ist Pbytearray byte an der Position
    Maske,temp,v:byte; // Maske,temp,v um den letzten Bit zu filtern
begin
  Maske:=254; // damit alle Bits 1 sind außer das letzte
  m:=1; // Erster Buchstabe im Memo
  f:=7; // weil man um 7 nach rechts shr
  g:=0; // um ein byte zu füllen immer ein weniger
  len:=Length(Memo1.Text); //länge des memo


    For y:=0 to hoehe-1 do begin // im bild codieren
      P1:=Image1.picture.Bitmap.ScanLine[y]; // scannt das image an der stelle y
        For x:=0 to (breite*3) do begin // an der stelle x das byte verändern
          v:=ord(Memo1.Text[m]); // Buchstabe in Zahl und dann ins byte
          f:=7; // damit f immer wieder null wird
          temp:=p1[x] and Maske; //p1 byte und maske um das letzte bit 0 zu setzen
          f:=f-g; // da man im nächsten byte die 2te stelle 0 setzt
          v:=v shr f; // um das erste bit des buchstaben zu bekommen
          P1[x]:=temp or v; // um das byte mit dem letzten bit verändert wieder ins memo zu schreiben
            if g<7 then inc(g) else begin // damit man immer nur maximal nach 6 shiftet
              g:=0; // g wieder 0 setzen
              f:=7; // eigentlich überflüssig da man oben schon f auf 7 setz als soppelte sicherheit ;)
              inc(m); // um neuen Buchstaben zu bekommen
              end;

          if m>=len then // verhindert das diese schleife das ganze bild verändert
           exit; // Aktion um diese Procedure zu beenden
        end; // Annmerkung hoehe und breite schon im private deklariet
    end;
  end;
Wie ihr sieht habe ich hier und da etwas verändert.
Hoffe ihr könnt mir Helfen da ich morgen eine 3 stündige Klausur über das Thema Codieren schreibe.
Die Procedure zum finden habe ich wieder gelöscht da ich vermute Fehler gemacht zu haben.
  Mit Zitat antworten Zitat