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.