![]() |
AW: was soll das übersetzt heißen?
jetzt bleibt das programm hängen er macht die schleife nicht
ist das denn mit meinen Erklärungen so richtig oder ist da ein Fehler? |
AW: was soll das übersetzt heißen?
Ich hab das jetzt aus dem Kopf geschrieben ohne es zu testen. Teste du das mal:
Delphi-Quellcode:
var
Bmp: TBitmap; x, y: Integer; s: String; PixCol: TColor; RGBCol: Integer; R, G, B: Byte; c: Char; begin Bmp := TBitmap.Create; try Bmp.LoadFromFile('c:\irgendeinbild.bmp'); //irgend ein Bmp Testbild Bmp.PixelFormat := pf24bit; //in 24Bit Bitmap umwandeln s := Edit1.Text; //Edit1.Text in s übertragen for y := 0 to Bmp.Height - 1 do for x := 0 to Bmp.Width - 1 do begin PixCol := Bmp.Canvas.Pixels[x, y]; //Pixel holen RGBCol := ColorToRGB(PixCol); //in RGB konvertieren R := GetRValue(RGBCol); G := GetGValue(RGBCol); B := GetBValue(RGBCol); if Length(s) > 0 then c := s[1] else c := #0; //wenn kein Zeichen, dann ersatzweise #0 oder etwas anderes Delete(s, 1, 1); //s um ein Zeichen kürzen R := Ord(...); if Length(s) > 0 then c := s[1] else c := #0; Delete(s, 1, 1); //s um ein Zeichen kürzen G := Ord(...); if Length(s) > 0 then c := s[1] else c := #0; Delete(s, 1, 1); //s um ein Zeichen kürzen B := Ord(...); PixCol := RGB(R, G, B); Bmp.Canvas.Pixels[x, y] := PixCol; end; finally Bmp.Free; end; end; |
AW: was soll das übersetzt heißen?
mhhh das ist ja mit diesen getrvalue das hatten wir ja nicht.
das mit dem R := Ord(...); kenne ich auch nicht und weiß nicht was es bedeutet? Merkwürdig ist das mein Programm bei rneu noch passt und dann bei gneu und bneu schon nicht funktioniert? |
AW: was soll das übersetzt heißen?
Schon alles erwähnt. Das Problem an deinem Projekt ist, dass du zuerst mit einem Auto ankommst das du repariert haben willst, dann wird es langsam zerlegt, immer mehr und mehr, bis dann irgendwann raus kommt, dass du nur die Kurbel fürs Fenster haben willst. Soll bedeuten, dass bei all deinen Fragen und was zuletzt übrig bleib, man nicht mehr weiß was eigentlich wichtig ist.
G := GetGValue(RGBCol) gibt den Grünanteil des Pixels, also das was wir mit G := Byte(Farbe shr 8) ermittelt haben. Dafür gibt es eine fertige Funktion. Und wenn du gleich gesagt hättest was du willst, dann wäre sie früher ins Spiel gekommen. Was könnte R := Ord(...); bedeuten? Mit etwas Fantasie könnte man meinen, dass es rneu:=ord(wert[hindex]); ist, und (...) einfach nur Platzhalter. Denn ich hab immer noch keine Ahnung was du da machst. Ich weiß, dass es irgendwas mit Verschlüsselung zu tun hat, aber ... |
AW: was soll das übersetzt heißen?
das problem ist das wir so nen paar sachen erzählt bekommen haben von unserem dozenten
und der nix anderes dann akzeptiert er meint das kann dann nur ausm Internet kommen und das ist ja alles falsch und schlecht... ich möchte jetzt ja nur diese neuen Pixelwerte aus meinem Editfeld der Reihe nach in das rneu,gneu,bneu rein haben jetzt hab ich das alles so geschrieben aber er bricht die schleife nicht ab. ich hab doch das until spalte+2 oder kann der das da nicht?
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var hindex,bildhoehe,bildbreite,zeile,spalte,X,Y,index1,laenge_der_verschluesselung,idt{Indexdeltatext}: integer; b:byte; farbe,ordnungszahl,farbe1,rneu,gneu,bneu,neues_pixel:integer; code,tex,wert:string; ch:char; begin spalte:=0; zeile:=0; tex:=Edit4.text; application.processmessages; ASSIGNFILE(f,'NeuesBild.dat'); REWRITE(F); Code:=edit4.text; laenge_der_verschluesselung:=length(Code); showmessage('Länge der Verschlüsselung '+inttostr(laenge_der_verschluesselung)); repeat for spalte:=1 to laenge_der_verschluesselung do begin farbe:=image1.Canvas.Pixels[spalte,0]; wert:=tex[spalte]; rneu:=ord(tex[spalte]); gneu:=ord(tex[spalte+1]); bneu:=ord(tex[spalte+2]); showmessage('Wert rneu '+inttostr(rneu)); showmessage('Wert gneu '+inttostr(gneu)); showmessage('Wert bneu '+inttostr(bneu)); end; until spalte+2=laenge_der_verschluesselung; Neues_Pixel:=(bneu shl 16) + (gneu shl 8)+ rneu; Closefile(f); end; |
AW: was soll das übersetzt heißen?
Du willst die Schleife abbrechen wenn die Länge der Verschlüsselung erreicht wurde
Die Variable "Spalte" gehört zur for-Schleife Mit Break kannst du die Schleife verlassen wenn die Bedingung erfüllt ist Die Repeat-Schleife komplett entfernen
Delphi-Quellcode:
for spalte:=1 to laenge_der_verschluesselung do
begin farbe:=image1.Canvas.Pixels[spalte,0]; wert:=tex[spalte]; rneu:=ord(tex[spalte]); gneu:=ord(tex[spalte+1]); bneu:=ord(tex[spalte+2]); showmessage('Wert rneu '+inttostr(rneu)); showmessage('Wert gneu '+inttostr(gneu)); showmessage('Wert bneu '+inttostr(bneu)); If spalte = laenge_der_verschluesselung then break; end; |
AW: was soll das übersetzt heißen?
so klappt es aber wieso ging das nicht mit der repeat schleife?
ich laufe doch auf jedenfall die schleife durch. und dann ist doch sofort das until erreicht mit (spalte:=1) spalte + 2 ist sofort die länge meiner Zeichen im Editfeld Ich hab jetzt aber keine idee wie ich diese schleife so hin bekomme das es so funktionert wie ich es möchte weil sobald ja die Länge wieder anders ist passen die neuen Werte für die buchstaben wieder nicht mehr... |
AW: was soll das übersetzt heißen?
Du müsstest eine Meldung bekommen ala:
[DCC Warnung] Unit2.pas(36): W1037 FOR-Schleifenvariable 'spalte' kann nach Durchlauf undefiniert sein Überleg mal was für einen Wert "spalte" beim letzten For-Schleifen-Durchlauf hat? Maximal den Wert von "laenge_der_verschluesselung" Daher kann die repeat-Schleife niemals als Bedingung
Delphi-Quellcode:
sein
spalte + 2 = laenge_der_verschluesselung
Diese Bedingung wird niemals nie nicht true Dadurch hast du eine Endlosschleife gebastelt die nebenbei immer und immer wieder die For-Schleife ausführt... |
AW: was soll das übersetzt heißen?
mhh die dürfte ja auch nur einmal durch bis zum until dann ist doch schon die abbruch bedingung erfüllt
ich seh jetzt nicht den Fehler dadranne |
AW: was soll das übersetzt heißen?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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 by Thomas Breitkreuz