12Bit Palette - Sauberer Farbverlauf

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Burstnibbler
Beiträge: 55
Registriert: 04.10.2008 12:10

12Bit Palette - Sauberer Farbverlauf

Beitrag von Burstnibbler »

Hallo miteinander.

Mit dem nachfolgendem Code erstelle ich eine 12-Bit Palette mit 4096 Farben.
Leider bekomme ich keinen sauberen Farbverlauf hin - da hocken immer diese Blautöne dazwischen.
Ich habe auch schon die Google-Bildersuche bemüht - aber meistens sehen die Farbverläufe da genauso aus, wie bei mir - und bei den wenigen Ausnahmen, wo es richtig dargestellt wurde, waren die Bilder leider nur im JPEG-Format verfügbar.

Darum meine Frage: Hat jemand eine Idee bzw. weiß es, wie man da einen sauberen Farbverlauf hinbekommt?

Code: Alles auswählen

EnableExplicit
;
#WIN   = 0
#G_IMG = 0
#IMG   = 0
;
Define.i red, green, blue, x, y
Dim      hVals.a(15)
;
CopyMemory(?hexVals, @hVals(), 16)
;
OpenWindow(#WIN, 0, 0, 320, 240, "4096 Colors Palette", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ImageGadget(#G_IMG, 0, 0, 320, 240, #Null)
;
;CreateImage(#IMG, 256, 16)
CreateImage(#IMG, 320, 240)
;
StartDrawing(ImageOutput(#IMG))
  For red = 0 To 15
    For green = 0 To 15
      For blue = 0 To 15
        Plot(x, y, RGB(hVals(red), hVals(green), hVals(blue)))
        x + 1
      Next
    Next
    x = 0
    y + 1
  Next
StopDrawing()
;
;SaveImage(#IMG, "4096_colors.bmp")
SetGadgetState(#G_IMG, ImageID(#IMG))
;
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow : Break
  EndSelect
ForEver
;
DataSection
  hexVals:
  Data.a  $00, $11, $22, $33, $44, $55, $66, $77, $88, $99, $AA, $BB, $CC, $DD, $EE, $FF
EndDataSection
;
Homer sagt: „In einer Welt die Verrückt spielt, ist nur ein Irrer wahrlich Geisteskrank.“
ST4242
Beiträge: 42
Registriert: 29.10.2011 16:54

Re: 12Bit Palette - Sauberer Farbverlauf

Beitrag von ST4242 »

Hallo,
meinst Dur vielleicht so?

Code: Alles auswählen

EnableExplicit
;
#WIN   = 0
#G_IMG = 0
#IMG   = 0
;
Define.i red, green, blue, x, y
Dim      hVals.a(15)
;
CopyMemory(?hexVals, @hVals(), 16)
;
OpenWindow(#WIN, 0, 0, 320, 240, "4096 Colors Palette", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ImageGadget(#G_IMG, 0, 0, 320, 240, #Null)
;
;CreateImage(#IMG, 256, 16)
CreateImage(#IMG, 320, 240)
;
StartDrawing(ImageOutput(#IMG))
  For red = 0 To 15
    For green = 0 To 15
    
        Plot(x, y, RGB(hVals(red), hVals(green), hVals(15-green)))
        x + 1
        Plot(x, y, RGB(hVals(red), hVals(green), hVals(15-green)))
        x + 1
        Plot(x, y, RGB(hVals(red), hVals(green), hVals(15-green)))
        x + 1
      
    Next
    x = 0
    y + 1
  Next
StopDrawing()
;
;SaveImage(#IMG, "4096_colors.bmp")
SetGadgetState(#G_IMG, ImageID(#IMG))
;
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow : Break
  EndSelect
ForEver
;
DataSection
  hexVals:
  Data.a  $00, $11, $22, $33, $44, $55, $66, $77, $88, $99, $AA, $BB, $CC, $DD, $EE, $FF
EndDataSection
;
Viele Grüße
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:

Re: 12Bit Palette - Sauberer Farbverlauf

Beitrag von NicTheQuick »

@ST4242: Bei deiner Palette fehlt ein sauberes Rot und es sind auch keine 4096 verschiedenen Farben mehr.
Bild
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:

Re: 12Bit Palette - Sauberer Farbverlauf

Beitrag von NicTheQuick »

Ich wäre eher so rangegangen, aber das sind dann auch nicht 4096 Farben, sondern nur 1352.

Code: Alles auswählen

EnableExplicit

#WIN   = 0
#G_IMG = 0
#IMG   = 0
#pixelSize = 5

Define width = #pixelSize * 104
Define height = #pixelSize * 31

Procedure min(a, b)
	If a < b
		ProcedureReturn a
	EndIf
	ProcedureReturn b
EndProcedure

Procedure max(a, b)
	If a > b
		ProcedureReturn a
	EndIf
	ProcedureReturn b
EndProcedure

Macro minmax(low, v, high)
	max(low, min(high, v))
EndMacro

NewMap colorcount(2048)

Dim hVals.a(15)

CopyMemory(?hexVals, @hVals(), 16)

OpenWindow(#WIN, 0, 0, width, height, "4096 Colors Palette", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ImageGadget(#G_IMG, 0, 0, width, height, #Null)

;CreateImage(#IMG, 256, 16)
CreateImage(#IMG, width, height)

If StartDrawing(ImageOutput(#IMG))
	Define x, y, c, r, r2, g, g2, b, b2, hue, sat
	For hue = 0 To 104
		c = hue % 15
		Select hue
			Case 0 To 14
				r = 15
				g = c
				b = 0
			Case 15 To 29
				r = 15 - c
				g = 15
				b = 0
			Case 30 To 44
				r = 0
				g = 15
				b = c
			Case 45 To 59
				r = 0
				g = 15 - c
				b = 15
			Case 60 To 74
				r = c
				g = 0
				b = 15
			Case 75 To 89
				r = 15 - c
				g = 0
				b = 15 - c
			Case 90 To 104
				r = c
				g = 0
				b = 0
		EndSelect
		;Debug "r:" + r + " g:" + g + " b: " + b

		For sat = -15 To 15
			r2 = minmax(0, r + sat, 15)
			g2 = minmax(0, g + sat, 15)
			b2 = minmax(0, b + sat, 15)
			x = hue * #pixelSize
			y = (sat + 15) * #pixelSize
			;Debug "r:" + r2 + " g:" + g2 + " b: " + b2
			Box(x, y, #pixelSize, #pixelSize, RGB(hVals(r2), hVals(g2), hVals(b2)))
			colorcount("r" + r2 + "g" + g2 + "b" + b2) = #True
		Next
	Next
	StopDrawing()
EndIf

Debug "Different colors: " + MapSize(colorcount())

;SaveImage(#IMG, "4096_colors.bmp")
SetGadgetState(#G_IMG, ImageID(#IMG))

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow : Break
	EndSelect
ForEver

DataSection
	hexVals:
	Data.a  $00, $11, $22, $33, $44, $55, $66, $77, $88, $99, $AA, $BB, $CC, $DD, $EE, $FF
EndDataSection
Vielleicht hilft dir aber das hier noch: https://de.wikipedia.org/wiki/HSV-Farbr ... HSV_in_RGB
Bild
Antworten