Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

06.01.2017, 23:14

Ja was soll denn da drin stehn? Notepad wird die Bytes als Codes für Zeichen interpretieren; dass dabei Müll herauskommt, ist klar, schließlich enthalten PNG-Dateien keine Bytes, die als Zeichencodes interpretiert werden sollen. Außer irgendweche Tags.

Azasel

unregistriert

12

06.01.2017, 23:25

Ja was soll denn da drin stehn?

Vielleicht so etwas:
00000 48 61 6C 6C 6F 2C 20 64 69 65 73 20 69 73 74 20
00010 65 69 6E 20 42 65 69 73 70 69 65 6C 2D 54 65 78
00020 74 2E

oder in Form von 0 und 1.

schließlich enthalten PNG-Dateien keine Bytes, die als Zeichencodes interpretiert werden sollen.

Wie bitte?
Kann ich diese Zeichenketten auch in Byte-Zeichenketten umwandeln lassen?

13

07.01.2017, 00:39

Alle Daten im Computer bestehen aus Nullen und Einsen bzw. An-/Aus-Signalen. Eine Stelle, die entweder Null bzw. Aus oder Eins bzw. An sein kann, wird auch Bit genannt.

Mit einem Bit kann man zwei Zahlen darstellen (z.B. 0 und 1).

Mit zwei Bit kann man schon vier Zahlen darstellen (00 steht dann z.B. für 0, 01 für 1, 10 für 2, 11 für 3).

Im Computer speichert man alles als Bits. Beim Speichern von Daten unterteilt man diese i.d.R. in Blöcke aus acht Bit. Acht Bit bilden ein Byte.

Einfache Textdateien enthalten die Buchstaben i.d.R. als Zahlen kodiert. Z.B. steht in vielen Formaten die Zahl 65 für das A. Die Zahl 65 in Bits wird im normalen Binärsystem mit 1000001 dargestellt.

Bilder enthalten auch Binärcodes bzw. Bytes. Diese geben aber z.B. Farben oder andere Informationen an und keine Buchstaben. Wenn Du eine Bilddatei in einem Texteditor öffnest (z.B. indem Du den Namen der Datei änderst und diese dann automatisch mit dem Texteditor geöffnet wird), dann gibt Dir der Texteditor einfach die Informationen des Bildes als Buchstabenwirrwarr aus. Jedes Byte wird nun als Buchstabe interpretiert - dabei kommt natürlich normalerweise nichts sinnvolles bei raus.

Hexadezimal-Zahlen sind Zahlen die statt zehn, sechzehn zur Basis haben. Das bedeutet bei der Darstellung, dass man nicht nur zehn Symbole benutzt (0,1,2,3,4,5,6,7,8,9) sondern sechzehn (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). Wenn man eine Datei mit einem Hex-Editor öffnet, rechnet dieser die Binärcodes nach dem Binärsystem in Zahlen um und stellt diese als Hexadezimalzahlen dar. Das spannende dabei ist, dass vier Bit genau sechzehn Zahlen darstellen können. D.h. man braucht pro vier Bit nur ein Hexadezimalzahl-Symbol. So kann man mit zwei Hexadezimal-Ziffern acht Bit bzw. ein Byte darstellen.

Im Hex-Editor wird ganz links meist noch die Nummer des ersten Bytes der Zeile angezeigt und zwar auch als Hexadezimalzahl. Das was Du als Beispiel geschrieben hast heißt also folgendes:

Das erste Byte in dieser Zeile ist das nullte Byte. Die Zeile besteht aus folgenden Bytes 48, 61, 6C... In Bits sind das 01001000, 01100001, 01101100...
Das erste Byte in dieser Zeile ist das sechzehnte Byte. Die Zeile besteht aus folgenden Bytes 65, 69, 6E... In Bits sind das 01100101, 01101001, 01101110...
Das erste Byte in dieser Zeile ist das zweiunddreißigste Byte. Die Zeile besteht aus folgenden Bytes 74, 2E. In Bits sind das 01110100, 00101110.

Ich hoffe das hilft ein bisschen.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Chromanoid« (07.01.2017, 09:08)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

07.01.2017, 07:47

Kann ich diese Zeichenketten auch in Byte-Zeichenketten umwandeln lassen?
Das sind Byte-Zeichenketten. Alles im Computer, alle Dateien, alle Daten sind Bytes. Auch Zeichenketten. Wie du diese Bytes interpretierst und anzeigst, ist aber verschieden. Man kann sie als Buchstaben/ASCII/Unicode anzeigen lassen oder als Farben oder als hexadezimale Zahlen.
PNG Datei mit dem Hex Editor geöffnet:
- Schwarz sind die hexadezimal formatierten Adressen der Bytes
- Rot sind die Bytes als hexadezimal formatierte Zahlen dargestellt
- Blau sind die Bytes als Buchstaben/ASCII interpretiert dargestellt (das, was Notepad macht)

Notepad ist allerdings kein Hex-Editor, sondern ein Text-Editor. Es geht davon aus, dass eine von dir geöffnete Datei Text enthält. Also interpretiert es alle Bytes als Text und zeigt dir Kauderwelsch an, wenn du eine PNG-Datei öffnest, da ein PNG eben keinen Text enthält, sondern binäre Daten, die ganz spezielle Bedeutungen haben - nämlich die, die im PNG-Format spezifiziert ist. Da sind also ein Header, Höhe und Breite der Datei und die komprimierten Pixel-Daten drin.
»BlueCobold« hat folgendes Bild angehängt:
  • hex.png
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (07.01.2017, 07:52)


Azasel

unregistriert

15

07.01.2017, 12:23

@Chromanoid
Tut mir Leid für deinen Aufwand, aber da erzählst du mir nichts neues :)

@BlueCobold
Notepad ist allerdings kein Hex-Editor, sondern ein Text-Editor. Es geht davon aus, dass eine von dir geöffnete Datei Text enthält. Also interpretiert es alle Bytes als Text und zeigt dir Kauderwelsch an, wenn du eine PNG-Datei öffnest, da ein PNG eben keinen Text enthält, sondern binäre Daten, die ganz spezielle Bedeutungen haben - nämlich die, die im PNG-Format spezifiziert ist. Da sind also ein Header, Höhe und Breite der Datei und die komprimierten Pixel-Daten drin.

Ok, jetzt verstehe ich so langsam, danke.

Frage geklärt!

16

07.01.2017, 13:48

Eine PNG Datei ist u.a. auch komprimiert, d.h. es folgen nicht alle Pixel aufeinander, so wie du dir das gerade vorstellst.
Ich vermute, dass du angenommen hast, dass du einfach nur für jeden Pixel 4 Byte (Rot, Grün, Blau, Alpha) schreiben musst, aber damit ist es nicht getan.
Außerdem besitzt so eine Datei einen Header und besteht aus Chunks.
http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html

Wenn du ernsthaft mit Java eine PNG zeichnen und abspeichern willst, solltest du auf bestehende Klassen / Libraries zurückgreifen, z.B. mit BufferedImage, Graphics2D und ImageIO arbeiten, wie in dem Link beschrieben, den ein Vorredner bereits reingestellt hat:
http://stackoverflow.com/questions/82022…g-file#14992446
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

Azasel

unregistriert

17

07.01.2017, 14:43

http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html


Danke sehr ^^

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

07.01.2017, 16:21

Eine PNG Datei ist u.a. auch komprimiert, d.h. es folgen nicht alle Pixel aufeinander, so wie du dir das gerade vorstellst.
Ich vermute, dass du angenommen hast, dass du einfach nur für jeden Pixel 4 Byte (Rot, Grün, Blau, Alpha) schreiben musst, aber damit ist es nicht getan.

Man kann auch unkomprimierte PNGs schreiben. Im PNG-Format werden nämlich die deflate-Kompressionsparameter mitgespeichert, und da kann man einfach angeben, dass die Daten nicht komprimiert sind.

Werbeanzeige