| 
| Autor | Beitrag |  
| Gausi 
          Beiträge: 8550
 Erhaltene Danke: 478
 
 Windows 7, Windows 10
 D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
 
 | 
Verfasst: Sa 23.12.06 00:23 
 
Ich bin müde, möchte aber trotzdem für die Wachgebliebenen schon jetzt eine Lösungsvariante vorstellen. Ich denke, ich habe in dem Blog schon genug dazu gesagt.
 Die richtigen Antworten sind
 Angelina Jolie
Darth Vader
Gollum
Halle Berry
Jessica Alba
Keira Knightley
Quark
Yoda
  Wie man darauf kommt - einfach in dem Programm die Buttons von oben nach unten durchklicken. Das einzige was man zusätzlich tun muss ist, in einem HexEditor nach dem String "MD5" zu suchen. Dass es so aussieht, als würde der zweite Hash mit JP.II anfangen, den Initialien des letzten Papstes, ist dabei reiner Zufall. Ich finds deshalb erwähnenswert, weil Angelina im letzten Moment eingesprungen ist, weil man bei Google für unsere erste Kandidatin etwas zu  freizügige Bilder gefunden hat.
 Die "Bonusrunde" ist mit dabei. Die kann man übrigens auch mit diesem Programm  finden.
Einloggen, um Attachments anzusehen!
 
_________________ We are, we were and will not be.
 |  |  |  
| coder62 Hält's aus hier
 Beiträge: 29
 
 
 
 
 | 
Verfasst: Sa 23.12.06 00:54 
 
hmm für die letzten 3 sowas inner art hatte ich probiert kam aber nix beirum und selbst jetzt wo ich die lösung habe versuche ich das nachzuvollziehen aber es kommt nur bei käse bei rum.
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 
 | var i,i2:integer;
 begin
 for i := 0 to 350 -1 do
 begin
 for i2 := 0 to 350 -1 do
 begin
 image2.Canvas.Pixels[
 image1.Picture.bitmap.Canvas.pixels[i,0],
 image1.Picture.bitmap.Canvas.pixels[0,i2]]
 := image1.Picture.bitmap.Canvas.pixels[i,i2];
 
 end;
 end;
 |  erzielt nicht das erwünschte ergebnis
 das im anhang kommt raus und wenn ich nix übersehe ist das wie in der auflösung nur ne bisschen andere variablenname und so.
Einloggen, um Attachments anzusehen!
 |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Sa 23.12.06 01:34 
 
Hmm, sieht eigentlich auch richtig aus... Naja, ich werd meine Lösung bald posten.
 Aber erstmal kommentiere ich noch ein wenig   . |  |  |  
| coder62 Hält's aus hier
 Beiträge: 29
 
 
 
 
 | 
Verfasst: Sa 23.12.06 01:44 
 
ja eigentlich hab ich es auch schon x mal mit der lösung verglichen und finde keine wirkliche fehler, aber bild im anhang beweist das irgendwas falsch ist hab nur keinen plan was. |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Sa 23.12.06 01:49 
 
Du kannst doch einfach mal dein ganzes Projekt posten, dann krieg ich schon raus, was falsch ist. Was mich irritiert sind die großen weißen Bereiche. Da frage ich mich, wo die her kommen...
Eigentlich ist das richtig herum, aber es sieht so aus, als wenn die Pixel genau an die falsche Stelle kommen. Versuch mal [0, i] und [i2, 0]... Obwohl das eigentlich verkehrt herum ist, aber du kannst es ja mal versuchen.
 
 Du wendest das doch auf das Gitterbild an, oder?
 |  |  |  
| coder62 Hält's aus hier
 Beiträge: 29
 
 
 
 
 | 
Verfasst: Sa 23.12.06 03:21 
 
werde morgen noch mal draufschauen, bin sowas von erledigt.
 und nur bezüglich dessen ist das alles an code, hab halt timage komponenten, lade da das gitter rein und führe dann per button die schleife aus, was eigentlich anhand der lösung auch genug sein sollte.
 edit: mit dem vertauschen kurz noch probiert bringt aber auch nix.
 edit2: ich werde mir auf immer und ewig in den allerwertesten beissen, kein wunder das ich das rätsel nicht knacken konnte, ich habe ne falsche datei die ganze zeit geladen die sieht dem orginal zwar sehr ähnlich aber den unterschied sieht man in der oben angehängten datei das ist zum    |  |  |  
| GTA-Place 
          
  Beiträge: 5248
 Erhaltene Danke: 2
 
 WIN XP, IE 7, FF 2.0
 Delphi 7, Lazarus
 
 | 
Verfasst: Sa 23.12.06 09:15 
 
Meine Prozedur für Halle und Co.:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 
 | procedure TForm1.Get234ButClick(Sender: TObject);var
 Bitmap: TBitmap;
 X, Y:   Integer;
 aCol:   TColor;
 begin
 Bitmap := TBitmap.Create;
 Bitmap.LoadFromFile('C:\Gitter.bmp');
 
 for Y := 0 to Bitmap.Height - 1 do
 for X := 0 to Bitmap.Width - 1 do
 begin
 aCol := Bitmap.Canvas.Pixels[X, Y];
 aCol := GetGValue(aCol) shl 7;
 aCol := GetRValue(aCol) shl 7;
 
 Bitmap.Canvas.Pixels[X, Y] := aCol;
 end;
 
 Bitmap.SaveToFile('C:\Test.bmp');
 Bitmap.Free;
 end;
 |  Je nachdem ob an der markieren Stelle R, G oder B stand, kam eine andere Person raus.
 Meine Prozedur um die letzten 3 zu finden:
 												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 
 | procedure TForm1.Get678ButClick(Sender: TObject);var
 Bmp1:    TBitmap;
 Bmp2:    TBitmap;
 Bmp3:    TBitmap;
 Bmp4:    TBitmap;
 X, Y:    Integer;
 nX, nY:  Integer;
 R, G, B: Integer;
 begin
 Bmp1 := TBitmap.Create;
 Bmp1.LoadFromFile('C:\Gitter.bmp');
 
 Bmp2        := TBitmap.Create;
 Bmp2.Width  := Bmp1.Width;
 Bmp2.Height := Bmp1.Height;
 
 Bmp3        := TBitmap.Create;
 Bmp3.Width  := Bmp1.Width;
 Bmp3.Height := Bmp1.Height;
 
 Bmp4        := TBitmap.Create;
 Bmp4.Width  := Bmp1.Width;
 Bmp4.Height := Bmp1.Height;
 
 for Y := 1 to Bmp1.Width do
 for X := 1 to Bmp1.Height do
 begin
 R := GetRValue(Bmp1.Canvas.Pixels[X, Y]);
 G := GetGValue(Bmp1.Canvas.Pixels[X, Y]);
 B := GetBValue(Bmp1.Canvas.Pixels[X, Y]);
 
 nX := Bmp1.Canvas.Pixels[X, 0];
 nY := Bmp1.Canvas.Pixels[0, Y];
 
 Bmp2.Canvas.Pixels[nX, nY] := RGB(R, R, R);
 Bmp3.Canvas.Pixels[nX, nY] := RGB(G, G, G);
 Bmp4.Canvas.Pixels[nX, nY] := RGB(B, B, B);
 end;
 
 Bmp2.SaveToFile('C:\Quark.bmp');
 Bmp3.SaveToFile('C:\Yoda.bmp');
 Bmp4.SaveToFile('C:\Gollum.bmp');
 
 Bmp1.Free;
 Bmp2.Free;
 Bmp3.Free;
 Bmp4.Free;
 end;
 |  Meine Prozedur um die verstecke Nachricht zu finden:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 
 | procedure TForm1.GetBonusClick(Sender: TObject);var
 FStream: TFileStream;
 Buffer:  TBuffer;
 X:       Integer;
 begin
 FStream := TFileStream.Create('C:\Jessica.txt', fmOpenRead);
 SetLength(Buffer, FStream.Size);
 FStream.Read(Buffer[0], Length(Buffer));
 
 for X := 0 to Length(Buffer) - 1 do
 begin
 if (Ord(Buffer[X]) <> 32) AND (Ord(Buffer[X]) <> 64) then
 Memo1.Text := Memo1.Text + Chr(Ord(Buffer[X]));
 end;
 
 FStream.Free;
 end;
 |  Dazu muss gesagt werden: Nachdem ich die einzelnen Bilder von Jessica und Co. gespeichert hatte, sind mir außer viele @ im Hexeditor noch Buchstaben aufgefallen. Diese zusammengesetzt ergaben den Bonus-Text  _________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
 |  |  |  
| delfiphan 
          Beiträge: 2684
 Erhaltene Danke: 32
 
 
 
 
 | 
Verfasst: Sa 23.12.06 10:49 
 
@coder62: Bei mir funktioniert dein Code.
 @Gausi: Hab's eben selbst gemerkt, dass meine Behauptung falsch war und durch eine andere ersetzt   
 Zuletzt bearbeitet von delfiphan am Sa 23.12.06 11:00, insgesamt 1-mal bearbeitet
 |  |  |  
| Gausi  
          Beiträge: 8550
 Erhaltene Danke: 478
 
 Windows 7, Windows 10
 D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
 
 | 
Verfasst: Sa 23.12.06 10:57 
 
Nein. Die Koordinaten stecken eigentlich in der Farbinformation als ganzes drin. Eine Farbkomponenente reicht nicht aus, da das Bild größer als 256 ist. Die ersten 256 Zeilen/Spalten haben einen R-Wert von 0-255, G und B sind 0. Danach kommen die restlichen mit einem zusätzlichen Grünanteil von 1.
Im "sortierten" Bild erkennt man daher am Rand einen Balken, der von Schwarz langsam Rot wird, dann wieder zu Schwarz zurückspringt und wieder rötlich wird (mit einem nicht erkennbaren Stich ins Grüne).
 
 Edit: Hier hat irgendwer was vorm Ansenden editiert...
 _________________ We are, we were and will not be.
 
 Zuletzt bearbeitet von Gausi am Sa 23.12.06 10:58, insgesamt 1-mal bearbeitet
 |  |  |  
| GTA-Place 
          
  Beiträge: 5248
 Erhaltene Danke: 2
 
 WIN XP, IE 7, FF 2.0
 Delphi 7, Lazarus
 
 | 
Verfasst: Sa 23.12.06 10:58 
 
Beachte außerdem das Edit von ihm: Er hat das falsche Bild geladen. _________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
 |  |  |  
| TmpDir 
          Beiträge: 53
 Erhaltene Danke: 3
 
 Win7HP Win8.1 Deb/Ubuntu
 C# [Delphi 6 Pro, Delphi 2005 PE, TurboDelphi PE]
 
 | 
Verfasst: Sa 23.12.06 12:14 
 
Hier mal ein Ansatz für die Farbkanäle ohne Canvas.Pixel
 @Rahmenfrage: Nimmt man nur den einen Farbkanal(Byte) des Rahmens, wo nur noch Nullen und Einsen übrig bleiben, kann man viel Spass haben, aus dem Binärcode eine Sinnvolle Nachricht zu machen.     mfg
 BTW: Kann man eigentlich auf den Datenbereich eines Bitmap direkt Zugreifen? In den meisten Beiträgen die ich da gelesen habe, steht immer was von "sehr umständlich" oder "kompliziert, da durch Windows verwaltet..." und das will ich nicht glauben.
Einloggen, um Attachments anzusehen!
 
_________________repeat  until   |  |  |  
| delfiphan 
          Beiträge: 2684
 Erhaltene Danke: 32
 
 
 
 
 | 
Verfasst: Sa 23.12.06 12:59 
 
@TmpDir: Scanline der letzten Bildzeile = Anfangsadresse für das ganze Bitmap. Die Zeilen sind einfach jeweils DWord-aligned (bei 24-bit Bitmaps beachten) und auf dem Kopf gespeichert. Nach einer Änderung im Speicher musst du ggf Image1.Invalidate ausführen, damit es nach einer Änderung neu gezeichnet wird. |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Sa 23.12.06 19:43 
Titel: Sooo, hier meine Lösung
 
Hallo!
 Ich hatte alles einzeln, aber jetzt hab ich dadraus ein richtiges Lösungstool gemacht. Es zeigt einem ALLE 8 Lösungen (bis auf das Bonusrätsel eben) an.
 Hier ein Screenshot:
   Sorry, dass das Fenster etwas groß ist, aber bei 1024er Auflösung geht es gerade. Am besten gehts mit 1152er oder mehr...
 Und hier der Download (selbstverständlich Exe + Quelltext, keine Komponenten müssen installiert werden, sollte ab Delphi 4 gehen):
www.buchmanager-berl...%20by%20jaenicke.zip Mirror 1 (Direktlink): www.sj-berlin.de/dow...%20by%20jaenicke.zip Mirror 2 (Direktlink): [url]http://www.jänicke.at/downloads/df/a7d09a3s19d/Multilevel%20by%20jaenicke.zip[/url]
 (Der Mirror 2 geht wegen des Umlauts z.B. im Free Downloadmanager nicht...) |  |  |  
| F34r0fTh3D4rk 
          Beiträge: 5284
 Erhaltene Danke: 27
 
 Win Vista (32), Win 7 (64)
 Eclipse, SciTE, Lazarus
 
 | 
Verfasst: Sa 23.12.06 19:53 
 
würdest du uns den vorgang des erstellens dieses genialen rätsels schildern ? wie du es geschafft hast, so viele informationen in einer datei zu verstecken und wie der entwicklungsvorgang von statten gegangen ist. was du mit welchen tools gemacht hast etc ?
 mfg
 |  |  |  
| Gausi  
          Beiträge: 8550
 Erhaltene Danke: 478
 
 Windows 7, Windows 10
 D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
 
 | 
Verfasst: Sa 23.12.06 20:29 
 
Zum Teil habe ich das ja schon im Blog getan. Ich kann hier ja mal ein paar Codeschnipsel bringen.
 Erster Schritt waren Grauwertbilder. Hab ich zwar auch selbst gemacht, aber das können andere Programme ebenso gut. Die drei Grauwertbilder hab ich pixelweise so zu einem zusammengefügt:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 
 | Image1.Picture.Bitmap.Canvas.Pixels[x,y] :=(Image4.Picture.Bitmap.Canvas.Pixels[x,y] AND $FF0000)
 or (Image5.Picture.Bitmap.Canvas.Pixels[x,y] AND $00FF00)
 or (Image6.Picture.Bitmap.Canvas.Pixels[x,y] AND $0000FF);
 |  Das interessanteste ist wohl das Durcheinanderwürfeln dieses Bildes. Das passiert so:
 												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 
 | var xarr, yarr: Array of Integer;
 setlength(xarr,Image1.Width);
 for x := 0 to Image1.Width - 1 do
 begin
 Image1.Picture.Bitmap.Canvas.Pixels[x,0] := x;
 xarr[x] := x;
 end;
 
 setlength(yarr,Image1.Height);
 for y := 0 to Image1.Height - 1 do
 begin
 Image1.Picture.Bitmap.Canvas.Pixels[0,y] := y;
 yarr[y] := y;
 end;
 
 for i := 1 to Image1.Width - 3 do
 begin
 x := i + random(Image1.Width-2 - i);
 tmp := xarr[i];
 xarr[i] := xarr[x];
 xarr[x] := tmp;
 end;
 
 for x := 0 to Image1.Width - 1 do
 for y := 0 to Image1.Height - 1 do
 Image4.Picture.Bitmap.Canvas.Pixels[xarr[x],yarr[y]] :=
 Image1.Picture.Bitmap.Canvas.Pixels[x,y];
 |   Man sieht vielleicht: Alles ein bissel Unsauber programmiert. Aber es läuft ;-)
 Damit war das Gitter-Bild fertig. Auf dieses Bild wurden dann die Schwarz-Weißbilder drübergelegt. Das lief im Wesentlichen so:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 
 | for y := 1 to Image1.Picture.Bitmap.Height -1 dobegin
 Source1      := Image1.Picture.Bitmap.Scanline[y];     Source2      := Image2.Picture.Bitmap.Scanline[y];     Destination  := aBitmap.ScanLine[y];
 for x := 1 to Image1.Picture.Bitmap.Width -1 do
 begin
 if Source2[3*x] = 255 then
 Destination[3*x] := Source1[3*x] or 1
 else
 Destination[3*x] := Source1[3*x] AND 254;
 Destination[3*x+1] := Source1[3*x+1];
 Destination[3*x+2] := Source1[3*x+2];
 end;
 
 |  Dabei wurden die Schwarz-Weißbilder aus Farbbildern gedithert. Gibts bestimmt Programme für, ich habs mit dem Code gemacht, den ich hier  schonmal gepostet habe.
 Hashsummen und weitere Hinweise kamen dann per HxD (der Hexeditor hier ausm Forum) hinzu. Dann Rot13 drüber, und zuletzt das mp3 per HxD in die ersten beiden Zeilen.
 Als Tools habe ich also schnell runterprogrammierte Eigenkreationen genommen, und HxD. Sonst nichts. Wenn man mal von dem WaveEditor/Recorder absieht, sowie VLC (damit hab ich EpisodeV abgespielt, in der das Zitat fällt). Damit hab ich das mp3 erstellt._________________ We are, we were and will not be.
 |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Sa 23.12.06 20:30 
 
Wie er das gemacht hat hat   Gausi  doch schon im Blog  geschrieben...
 // EDIT: Gerade hab ich mich gewundert, warum noch keiner geantwortet hat...   |  |  |  
| Tilman 
          Beiträge: 1405
 Erhaltene Danke: 51
 
 Win 7, Android
 Turbo Delphi, Eclipse
 
 | 
Verfasst: So 24.12.06 01:34 
 
Naja da das Rätsel nun vorbei ist kann ich als "verbrecher" des alternativen Weihnachts-Rätsels ja mal verraten wie ich die S/W-Bilder in den Channels verstekct habe bzw. man sie meiner Meinung nach finden sollte: habe die drei Kanäle R,G,B jeweils (als Integer-zahl) auf die nächstkleinere Zahl abgerundet, z.B. 1 auf 0, 99 auf 98 usw. Schwarze Pixel wurden dann +1 (=ungerade). Ferig der Lack. Braucht man also kein mod/div dafür, auch wenns damit eleganter geht   _________________Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen. 
(Koreanisches Sprichwort) |  |  |  |