GetPIXEL RGB-Code umwandeln *gelöst*

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

GetPIXEL RGB-Code umwandeln *gelöst*

Beitrag von onny »

HI, ich möchte gerne einen RGB-Code aus GetPixel (http://msdn.microsoft.com/en-us/library ... S.85).aspx) in PureBasic in Red, Green, Blue umwandeln.

Ich habe das Gefühl mit den PureBasic Befehlen geht das nicht...

normalerweise muss man das so umwandeln:

Code: Alles auswählen

Dim Red as Byte 
   Dim Green as Byte
   Dim Blue as Byte

   Red = Color and &H000000FF&              'mind the ampersand at the end of constant
   Green = (Color and &H0000FF00&) / 256    'bit masking and "shift" 
   Blue = (Color and &H00FF0000&) /65535    'bit masking and "shift" 
Wie funktioniert das in PureBasic?
Zuletzt geändert von onny am 27.07.2008 00:08, insgesamt 2-mal geändert.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Ich denke du suchst das:

Code: Alles auswählen

; German forum: http://www.purebasic.fr/german/viewtopic.php?t=2887&highlight=
; Author: DarkDragon (based on code by Rings, extended by Andre)
; Date: 09. April 2005
; OS: Windows
; Demo: No


; Get the color under the mouse cursor
; Farbe des Punktes unter dem Mauscursor ermitteln

Procedure GetColorUnderMouse() 
  GetCursorPos_(@CursorPos.POINT ) 
  hDC = GetDC_(0) 
  If hDC <> 0 
    Color = GetPixel_(hDC,CursorPos\x,CursorPos\y) 
    ReleaseDC_(0, hDC) 
    ProcedureReturn Color 
  EndIf 
EndProcedure 

color.l = GetColorUnderMouse()

Debug "Color:"
Debug color

Debug "Color in Hex format:"
Debug Hex(color)

Debug "Color in RGB values:"
Debug Red(color)
Debug Green(color)
Debug Blue(color)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Code: Alles auswählen

Define.l Color

Color = $1234FF


Define.b Red, Green, Blue

Red = Color & $FF
Green = (Color >> 8) & $FF
Blue = (Color >> 16) & $FF

Debug Red
Debug Green
Debug Blue
Debug ""

;oder so:

Red = Red(Color)
Green = Green(Color)
Blue = Blue(Color)

Debug Red
Debug Green
Debug Blue
Debug ""

;oder so:
Structure Color4B
  Red.b
  Green.b
  Blue.b
  Reserved.b
EndStructure

Define.Color4B *Colors = @Color

Debug *Colors\Red & $FF
Debug *Colors\Green & $FF
Debug *Colors\Blue & $FF
Allerdings musst du daran denken, dass Byte in PureBasic signed ist, also
der Wertebereich von -128 bis 127 geht und somit -1 (=255) der höchste
Wert ist.
Deswegen kannst du bei den ersten beiden Methoden entweder einfach
Long- statt Byte-Variablen nutzen, oder du schreibst hinter die Debug-
Zeilen noch ein & $FF, wie ich es bei der letzten Methode gemacht habe.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Wie funktioniert das in PureBasic?

praktisch genauso, nur dass du eben nicht Byte-Typen verwenden solltest,
wegen des Vorzeichens, wie schon von Nic angesprochen.

hier mal 1:1 die übersetzung deines snippets:

Code: Alles auswählen

Define Red.l
Define Green.l
Define Blue.l

Red   =  Color & $000000FF            ; in PB, the ampersand is bitwise AND
Green = (Color & $0000FF00) / 256     ;'bit masking and "shift"
Blue  = (Color & $00FF0000) /65535    ;'bit masking and "shift"
man kann übrigens auch direkt bitweise shiften:

Code: Alles auswählen

Red   =  Color & $000000FF
Green = (Color & $0000FF00) >>  8
Blue  = (Color & $00FF0000) >> 16
und man kann die PB-internen Befehle nutzen:

Code: Alles auswählen

Red   = Red(Color)
Green = Green(Color)
Blue  = Blue(Color)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

danke hat mir weiter geholfen :allright:
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Aber bitte schreib: gelöst!!
Windows 11 - PB 6.03 x64
_________________________________
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

*grml* ....also ich finde diese [gelöst] -tags im titel super nervig, wie rickys pop-sofa oder sowas.

PS:
"gelößt" ist natürlich noch schlimmer, der thread ist ja nicht von einem gletscher hergeschliffen worden...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

Beitrag von K.Putt »

@ Kaeru Gaman

Das mit den "Gelöst" Tags im Titel finde ich sehr gut, das macht Threads teilweise interessanter.
Ich lese so auch öfters mal Threads die mich sonst nicht speziell interessieren würden.
PB 5.x & Win 7 64Bit
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Beitrag von onny »

oh mist sry, habs geändert ^^
Antworten