AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

was soll das übersetzt heißen?

Ein Thema von EMS · begonnen am 5. Jan 2013 · letzter Beitrag vom 6. Jan 2013
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#1

was soll das übersetzt heißen?

  Alt 5. Jan 2013, 17:04
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;
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: was soll das übersetzt heißen?

  Alt 5. Jan 2013, 17:12
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.

Geändert von Popov ( 5. Jan 2013 um 17:20 Uhr)
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#3

AW: was soll das übersetzt heißen?

  Alt 5. Jan 2013, 18:36
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?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: was soll das übersetzt heißen?

  Alt 5. Jan 2013, 18:45
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.
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#5

AW: was soll das übersetzt heißen?

  Alt 5. Jan 2013, 18:49
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
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: was soll das übersetzt heißen?

  Alt 5. Jan 2013, 19:00
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?
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#7

AW: was soll das übersetzt heißen?

  Alt 5. Jan 2013, 19:37
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.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: was soll das übersetzt heißen?

  Alt 5. Jan 2013, 19:52
Der Code $00FF00 SHR 8 ist kein Farbfilter, wird hier aber u. a. für diese Aufgabe eingesetzt. SHR 8 macht aus $00FF00 den Wert $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 Chr(X: Byte): Char; nutzt, dann bleibt von $0000FF nur noch $FF . Bei $00FF00 wäre es $00 . Es wird also mit $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.
  Mit Zitat antworten Zitat
EMS

Registriert seit: 19. Dez 2012
97 Beiträge
 
#9

AW: was soll das übersetzt heißen?

  Alt 5. Jan 2013, 20:02
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??
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: was soll das übersetzt heißen?

  Alt 5. Jan 2013, 20:29
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 Uhr.
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