| Autor |
Beitrag |
Luzifer
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Di 08.11.05 15:37
Hi leute
Es geht um das P4-Format (*.pbm = PortableBitmap). in diesem Format sind die Informationen wie in vielen anderen gängigen Formaten gespeichert. Immer 8 Pixel zusammen, als Bits in ein Byte, dieses wird dann mit einem Ascii-Zeichen dargestellt...... Mein Problem ist folgendes: Wie kann ich diese Bytes so auseinander nehmen, dass ich wieder meine schönen 1en und 0en hab? Ich dachte schon an die Shiftright bzw -left-Funktion, aber ich weiß nicht ob die hierbei funktioniert........
_________________ Never touch a running system
|
|
ähM_Key
      
Beiträge: 88
Windows XP Professional
D7 Enterprise
|
Verfasst: Di 08.11.05 17:10
Hi!
Mach's doch per Hand; also erst probieren ob das Byte durch 128=2^7 zu teilen geht, bzw. der Rest größer eins ist. Wenn ja, dann ist das erste (bzw. 8.) Bit eine 1, wenn nein eine 0 usw...
Grüße; ähM_Key
_________________ Alles geht ni! Aber ein bissl' was muss!
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Di 08.11.05 17:17
hmm das problem dabei ist folgendes: die Daten stehen ungefähr so in der Datei:
Delphi-Quelltext
dabei repräsentiert jedes dieser Zeichen ein Byte, also 8 bits und damit 8 pixel.....
nun möchte ich gerne aus diesen Zeichen die entsprechenden werte im 2ersystem haben, also aus
ñ soll zB 00101101 werden, damit ich das darstellen kann. 0=weiß, 1=schwarz
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Di 08.11.05 17:26
Hallo!
Wenn ein Pixel von nur einem Bit repräsentiert wird, kannst du doch tatsächlich nur zwei Zustände abbilden (also bspw. schwarz oder weiß, Grautöne aber nicht). Ist das wirklich so in dem Format?
Wenn´s so ist, nutze diese Funktion, um die einzelnen Bits auszulesen.
Delphi-Quelltext 1: 2: 3: 4:
| Function BitOfByte(Index:Integer; B:Byte):Boolean; begin Result:=(B and (1 shl Index))>0; end; |
Cu,
Udontknow
Zuletzt bearbeitet von Udontknow am Di 08.11.05 17:52, insgesamt 1-mal bearbeitet
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Di 08.11.05 17:37
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Di 08.11.05 17:55
Hallo!
Habe noch eine Kleinigkeit korrigiert (siehe oben).
Der Teil "1 shl Index" ergibt eine Suchmaske. "1" ist im Endeffekt der Bytewert "00000001". Aus "1 shl 6" wird dann "01000000". Dieses Ergebnis wird mit einer binären AND-Operation auf das zu untersuchende Byte verknüpft:
Quelltext 1: 2: 3:
| Byte 11000100 Mask 01000000 Result 01000000 |
Ist das Ergebnis größer als 0, so ist das im Index angegebene Bit gesetzt, die Ausgabe ist True.
Cu,
Udontknow
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Di 08.11.05 18:03
ahhhh! beim 7. mal lesen hab ichs dann auch verstanden...... *werlesenkannistklarimvorteil*
zumindest größtenteils..... ich frag mich noch was das "and" genau macht...
und müsste das nicht immer größer als null sein wenn ich zB ein Byte habe das so aussieht: 11111111 und ich beispielsweise die 3. stelle überprüfen will?
|
|
Der Blaue Gott Balmung
Hält's aus hier
Beiträge: 13
WinXP
|
Verfasst: Di 08.11.05 18:24
Hi,
Luzifer hat folgendes geschrieben: | ich frag mich noch was das "and" genau macht...
und müsste das nicht immer größer als null sein wenn ich zB ein Byte habe das so aussieht: 11111111 und ich beispielsweise die 3. stelle überprüfen will? |
And soll die zwei Bytes "verknüpfen":
Wenn man die Bytes untereinanderschreibt, ergibt diese Verknüpfung bei zwei übereinanderstehenden Nullen 0, bei einer Null unter oder über einer eins auch 0 und bei zwei Einsen 1.
Mit der Funktion soll geprüft werden, ob an einem bestimmten Index eine 1 steht.
Die Antwort auf deine Frage lautet demnach ja, weil an der dritte Stelle von 11111111 eine 1 steht, was ja bekanntlich größer als 0 ist
Allerdings kann nur True und False zurückgegeben werden.
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Di 08.11.05 18:30
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Di 08.11.05 18:45
nur eine einzig kleine Frage hab ich noch
gibt es einen Befehl like IntToStr für ByteToBinär??
|
|