Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   was soll das übersetzt heißen? (https://www.delphipraxis.net/172464-soll-das-uebersetzt-heissen.html)

EMS 5. Jan 2013 16:04

was soll das übersetzt heißen?
 
Hallo
Ich habe hier diesen Quelltext aber kann damit nix anfangen
kann mir den jemand erkläre?

Delphi-Quellcode:
s:='';
   for index:=1 to anz do
       begin
       farbe:=image1.canvas.pixels[index,0]; //showmessage(inttostr(farbe));

       b:=farbe and $ff; ch :=chr(b);
       s:=s+ch;

       b:=(farbe and $ff00) shr 8; ch :=chr(b);
       s:=s+ch;

       b:=(farbe and $ff0000) shr 16; ch :=chr(b);
       s:=s+ch;

Popov 5. Jan 2013 16:12

AW: was soll das übersetzt heißen?
 
Es handelt sich hier wohl um eine 24 Bit Bitmap. Das macht 3 Byte. Hier wird der Wert jedes der Bytes ermittelt in dem man es mit $FF Wert AND rechnet.

Ein 3 Byte Beispiel

Delphi-Quellcode:
00101001 10011011 01001010
00000000 11111111 00000000 AND
--------------------------
00000000 10011011 00000000 Ergebnis
In der ersten Zeile ist ein 3 Byte Wert (24 Bite). Dadurch, dass hier nur das zweite Byte mit $FF (oder 11111111) und AND gerechnet wird, bekonnt man nur das Ergebnis des zweiten Bytes zurück. Denn 1 and 1 ergeben 1. Und 1 and 0 ergeben 0. Da also das erste und dritte Byte mit $00 gerechnet werden, ist da das Ergebnis immer $00.

//Edit:

Ach so, und SHR verschiebt den Wert um die Anzahl Bites nach Rechts. Hast du also 10101010 00000000 SHR 6, wird alles um 6 nach rechts verschoben 00000010 10101000.

EMS 5. Jan 2013 17:36

AW: was soll das übersetzt heißen?
 
ja das habe ich soweit verstanden aber ich verstehe nicht was das s:=s+ch
bzw. ch :=chr(b);macht und dann noch dreimal hintereinander?

Popov 5. Jan 2013 17:45

AW: was soll das übersetzt heißen?
 
Wenn du einen Code hast den du verstehst, bis auf eine Sache, dann schreib das auch so hin und nicht "Ich habe hier diesen Quelltext aber kann damit nix anfangen". Vorher soll einer aus dem Satz erkennen was du weißt und was nicht.

Ein Tipp: guck in der OH, experimentiere ein wenig, dann verstehst du den Rest auch.

EMS 5. Jan 2013 17:49

AW: was soll das übersetzt heißen?
 
das programm geht ja nicht richtig, deshalb würde ich es gerne mal verstehen
und dann selber nachbauen schritt für schritt aber ich weiß nicht was es jetzt da in diesen Zeilen tut mit den werten

Popov 5. Jan 2013 18:00

AW: was soll das übersetzt heißen?
 
Dann stelle ich die richtigen Fragen:

- was macht CHR?
- was macht $00FF0 SHR 8? Was macht $FF0000 SHR 16?
- was passiert wenn man Word zu Byte konvertiert?
- was liefert Char := Chr(Byte);
- was passiert wenn man String := String + Char zusammenfügt?

EMS 5. Jan 2013 18:37

AW: was soll das übersetzt heißen?
 
chr ist eine Funktion und gibt einen zahlen(Integer) wert als Buchstaben aus.

$00FF00 SHR 8?

ist der Farbfilter für den Grünenbereich und gibt diese "hohe Zahl/ WERT*256" aus und schiebt in den Rotenbereich dort wird diese Zahl dann als Wert zwischen 0 und 255 angezeigt

$FF0000 SHR 16?

Das selber Spiel für den Blaubereich und hier wird die Wert*256*256 ebenfalls nach rot geschoben

Word zu Byte

Ich vermute aus den Buchstaben werden Integers gewandelt???

was liefert Char := Chr(Byte);

Soll einen Buchstaben liefern. Aber wiese soll nun aus einer Zahl das CHR gemacht werden´??

was passiert wenn man String := String + Char zusammenfügt?

Hier hat man eine Zeichenkette mit einem Zeichen zusammen geführt.

Popov 5. Jan 2013 18:52

AW: was soll das übersetzt heißen?
 
Der Code
Delphi-Quellcode:
$00FF00 SHR 8
ist kein Farbfilter, wird hier aber u. a. für diese Aufgabe eingesetzt.
Delphi-Quellcode:
SHR 8
macht aus
Delphi-Quellcode:
$00FF00
den Wert
Delphi-Quellcode:
$0000FF
. Die Bits wurden eben um 8 Bits nach rechts verschoben. Wenn man das jetzt zum Byte konvertiert, und das passiert nebenbei wenn man die Funktion
Delphi-Quellcode:
Chr(X: Byte): Char;
nutzt, dann bleibt von
Delphi-Quellcode:
$0000FF
nur noch
Delphi-Quellcode:
$FF
. Bei
Delphi-Quellcode:
$00FF00
wäre es
Delphi-Quellcode:
$00
. Es wird also mit
Delphi-Quellcode:
$00FF00 SHR 8
der interessante zweite Byte weiterverschoben, sozusagen zu Byte zugeschnitten und mit Chr zum ASCII Zeichen konvertiert. Macht man das mit allen drei Byte Werten, ergibt das drei ASCII Zeichen die zum Schluss einen String aus drfei Buchstaben ergeben, z. B. Aj6. Das ist dann die in String "konvertierte" Farbe. Allerdings habe ich das noch nie gesehen und auch sonst halte ich davon nichts, da eine 0 mitten drin immer Probleme bereitet. Aber irgendwer kam eben auf die Idee es so zu machen.

EMS 5. Jan 2013 19:02

AW: was soll das übersetzt heißen?
 
Mhh also so richtig verstanden habe ich das noch nicht.

Also ich habe jetzt mein PIXEL als Integer dieses soll jetzt ein Byte werden?
Ist das so richtig verstanden?
Ich hatte das bisher so verstanden das dieses Pixel aus 4 Bytes besteht.
Im ersten linken ist nix im 2. dann der Blau wert danach der Grün und dann der Rote.
Und jetzt leses ich aus diesem Integer die drei Farben aus das sind dann aber wieder integerwerte.
Und diese Integerwerte der jeweiligen Farbe konvertiere ich dann jetzt zu einem Byte??

Popov 5. Jan 2013 19:29

AW: was soll das übersetzt heißen?
 
Ja und nein. Der Code gibt zum Teil etwas Sinnvolles und zum Teil weniger Sinnvolles. Also je nach Farbtiefe gibt es z. B. die Bitmap in 32Bit, 24Bit, usw. Für RGB brauchst du nur 3 Byte (RGB), also 3 * 8 = 24 Bit. Das vierte Byte von 32Bit ist nicht leer, da sind auch Informationen gespeichert, aber jetzt keine die uns hier interessieren. Dich interessieren also nur 24Bit Bitmaps. Entweder man ignoriert jetzt das vierte Byte oder konvertiert das in 24Bit Bitmap.

Also du hast jetzt eine 24Bit Bitmap die aus 3 Bytes besteht. Die erste Aufgabe ist es jetzt die einzelnen Bytes zu filtern, d. h. mach aus dem Integer Color Wert drei einzelne Byte Werte (das vierte ignorieren wir). Also $00FFEEDD in $FF, $EE und $DD zerlegen.

Jetzt wird aus (z. B.) $DD durch Chr($DD) ein ASCII Wert (ob das einen Sinn macht ist eine andere Sache). Das alles drei mal und man hat den String.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz