Grafik: Pixel <-> Farben

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

lordlomex

Betreff: Grafik: Pixel <-> Farben

BeitragDi, Jul 13, 2010 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo liebe Community...
Ich arbeite gerade viel mit Pixen von Pixmaps und irgendwie will das alles nciht so wie ich will.

Kann sich wer die folgendn Funktionen anschauen und mir sagen was falsch ist?

Vermutlich habe ich die Reihenfolge der Farben vertauscht, ich weiß aber nicht was Standard ist (RGBA? ARGB? BGRA?).
Die erste Funktion setz mir aus c(r,g,b,a) eine Farbe zusammren, die anderen sollen Farbkanäle extrahieren.

Code: [AUSKLAPPEN]


Function c:Int (r:Int,g:Int=-1,b:Int=-1,a:Int=255)
      If g<1
      g = r
      b = r
      If r = 0 Then a = 0
   EndIf
   Return (r | g*Int(2^8) | b*Int(2^16) | a*Int(2^24))
End Function

Function r:Byte (c:Int)
   Return (c Mod 256)
End Function

Function g:Byte (c:Int)
   Return ((c Shr 8) Mod 256)
End Function

Function b:Byte (c:Int)
   Return ((c Shr 16) Mod 256)
End Function

Function a:Byte (c:Int)
   Return ((c Shr 24) Mod 256)
End Function

mpmxyz

Betreff: ARGB!

BeitragDi, Jul 13, 2010 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist das Format "ARGB". (Schau dir die entsprechenden Parameter mal an. Wink)
BlitzMax: [AUSKLAPPEN]
Return a Shl 24|r Shl 16|g Shl 8|b

Übrigens:
nutze zur Bestimmung der Farbanteile lieber das bitweise UND:
BlitzMax: [AUSKLAPPEN]
Function r:Byte (c:Int)
Return (c & $FF)
End Function

Function g:Byte (c:Int)
Return ((c Shr 8) & $FF)
End Function

Function b:Byte (c:Int)
Return ((c Shr 16) & $FF)
End Function

Function a:Byte (c:Int)
Return ((c Shr 24) & $FF)
End Function

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

lordlomex

BeitragDi, Jul 13, 2010 23:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, deine Beispiele funktionieren. Mein gesamtcode leider immer noch nicht.

Denn ich weiß nicht mit welchem Typ ich Pixmaps erstellen muss damit ich "ARGB" bekomme:

Zitat:
format should be one of the following:
Format Description
PF_A8 8 bit alpha
PF_I8 8 bit intensity
PF_RGB888 24 bit big endian RGB
PF_BGR888 24 bit little endian RGB
PF_RGBA8888 32 bit big endian RGB with alpha
PF_BGRA8888 32 bit little endian RGB with alpha

Holzchopf

Meisterpacker

BeitragDi, Jul 13, 2010 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
PF_RGBA8888
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

lordlomex

BeitragDi, Jul 13, 2010 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber das ergibt doch so keinen sinn Confused
Ich hab schon viele Kombinationen durchgeschaut und komme nicht weiter.

Angeziegt werden müsste hier z.B. ein roter Kreis mit grünem Rand.
Angezeigt wird ein grauer Kreis mit grünem Rand?

EDIT: Ach. vergesst es, meine Default-Werte bringen das irgendwie durcheinander..
Also, hat sich erledigt, ich hab dummerweise statt 1 eine 0 gemacht!

Code: [AUSKLAPPEN]
Function c:Int (r:Int,g:Int=-1,b:Int=-1,a:Int=255)
      If g<0 ' <------ !!!
      g = r
      b = r
      If r = 0 Then a = 0
   EndIf
   Return a Shl 24|r Shl 16|g Shl 8|b
End Function

Vielen Dank alos nochmal, mein Problem ist damit gelöst.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group