[GELÖST] Rückgabe von Readpixel() in 3 Bytes aufteilen?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] Rückgabe von Readpixel() in 3 Bytes aufteilen?

BeitragSa, Jul 07, 2012 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe ein Problem: Ich lese via "Readpixel()" alle Pixel einer Pixmap aus. Nun brauche ich ich allerdings die Rot, Grün und Blau Anteile des gelesenen pixels. Wie kann ich denn aus der Rückgabe (Int) die 3 (4) Bytes auslesen?
Nebenbei: Wie groß kann so eine Pixmap werden? gibt es da Begrenzungen, wenn ja, bei wieviel?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Mo, Jul 09, 2012 1:46, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSa, Jul 07, 2012 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest mit der Forensuche fündig werden. Die Lösung ist die gleiche wie für BB ReadPixel außer, dass man die logischen And/Or zu Binären ändern muss.
Gibt keine mir bekannte Größenbeschränkung für Pixmaps - außer, dass riesige Pixmap vermutlich keinen Sinn machen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragMo, Jul 09, 2012 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann man denn die logischen And/Or zu Binären umwandeln? Die Forensuche hat nicht ergeben... Hier mein bisheriger Code:
BlitzMax: [AUSKLAPPEN]
Local rgb:Int = ReadPixel(Image, x, y)
Local rgb2:Int = rgb And $FFFFFF
Local r:Byte = (rgb2 And $FF0000) / $10000
Local g:Byte = (rgb2 And $FF00) / $100
Local b:Byte = rgb2 And $FF
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Nova

BeitragMo, Jul 09, 2012 1:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit And prüft man nur, ob zwei Ausdrücke logisch wahr sind. "Ist die erste Aussage wahr UND die zweite, dann mach bla".
Um wirklich die einzelnen Bits der Farbe zu bearbeiten, brauchst du einen anderen Operator. Dieser ist &
Außerdem war die zweite Zeile unnötig. Hier eine Version, die gleich getestet werden kann, da sie die Ergebnisse als Debuglog ausgibt.
Die Variable a enthält übrigens den Alpha-Wert der Farbe. Dieser gibt an, wie durchsichtig die Farbe ist. 255 = Die Farbe ist vollständig deckend. 0 = Die Farbe wird gar nicht angezeigt, die Farbe des Hintergrunds scheint vollständig durch.

BlitzMax: [AUSKLAPPEN]
Local rgb:Int = $FFFFFFFF
Local a:Byte = (rgb & $FF000000) / $1000000
Local r:Byte = (rgb & $FF0000) / $10000
Local g:Byte = (rgb & $FF00) / $100
Local b:Byte = rgb & $FF

DebugLog ""
DebugLog " " + a
DebugLog " " + r
DebugLog " " + g
DebugLog " " + b
DebugLog ""

End
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit
 

CO2

ehemals "SirMO"

BeitragMo, Jul 09, 2012 1:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, Danke dir, Funktioniert einwandfrei!
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group