Fehler bei Setcolor 0,0,0 für Drawtext

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

funkheld

Betreff: Fehler bei Setcolor 0,0,0 für Drawtext

BeitragMo, Aug 15, 2016 9:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, guten Tag.

Ich habe ein Bild als grünes Rechteck in einem Image. Der Hintergrund ist grau mit Setclscolor.
Dieses Rechteck kann ich mit den Tasten drehen und bewegen.
Für den Drawtext habe ich "setcolor 255,255,255".
Wenn ich den Text jetzt auf schwarz setze mit "setcolor 0,0,0", wird auch das Imagerechteck schwarz.
Was habe ich für ein Fehler gemacht?

Danke.
Gruss

Code: [AUSKLAPPEN]

SuperStrict
Import brl.max2d

SetGraphicsDriver D3D9Max2DDriver()
Graphics 600,400

global rot:float
global xs:float,ys:float,x1:float,y1:float,delta:float

Global bild:TImage=CreateImage(70,40)
SetColor 0,255,0
DrawRect 0,0,70,40
SetColor 255,0,0
Plot 15,20
GrabImage bild,0,0
cls

xs=310
ys=190
delta=2

setclscolor 220,220,220
Repeat
    Cls

    Select True
    Case KeyDown(KEY_q)
   rot=rot-1
    Case KeyDown(KEY_e)
      rot=rot+1
    Case KeyDown(KEY_w)
       y1=Sin(rot)*delta
       x1=Cos(rot)*delta
        xs=xs+x1
        ys=ys+y1 
     Case KeyDown(KEY_s)
       y1=Sin(rot)*delta
       x1=Cos(rot)*delta
       xs=xs-x1
      ys=ys-y1
  End Select   

  SetRotation ( rot )
  SetImageHandle(bild,35,20)
  setscale 0.8,0.9
  DrawImage bild,xs,ys

  SetRotation 0
  setscale 1.0,1.0
  setcolor 255,255,255 >>>>> wenn ich den auf Setcolor 0,0,0 setze ist auch das Image schwarz.
  DrawText rot,10,10
  Flip
Until KeyHit (KEY_ESCAPE)
  • Zuletzt bearbeitet von funkheld am Mo, Aug 15, 2016 13:28, insgesamt 3-mal bearbeitet

BladeRunner

Moderator

BeitragMo, Aug 15, 2016 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo in deinem Code ist der 'fehlerhafte' SetColor?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

DAK

BeitragMo, Aug 15, 2016 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
SetColor betrifft alle nachfolgenden Grafikbefehle. Es multipliziert jeden Farbkanal mal dem eingegebenen Wert.

Als Beispiel:

Pixelfarbe 255,255,255
SetColor 255,128,0

Zuerst müssen die Werte normalisiert werden (auf eine Skala von 0.0-1.0 gebracht werden). Dazu werden sie durch 255 dividiert.

Pixelfarbe 1.0, 1.0, 1.0
SetColor 1.0,0.5,0.0

Jetzt werden die Werte multipliziert:

Pixelfarbe 1.0,0.5,0.0

Und wieder mal 255 gerechnet um die Originalskala zu bekommen:

Pixelfarbe 255,128,0

Das ist, was passiert, wenn du SetColor mit einem der "normalen" Grafikbefehle (z.B. DrawText, DrawRect oder so) verwendest, da diese Befehle von sich aus nur weiße Pixel zeichnen.

Wenn du ein Bild zeichnest, dann schaut das z.B. so aus:

Pixelfarbe 128,192,64
SetColor 255,128,0

Pixelfarbe 0.5,0.75,0.25
SetColor 1.0,0.5,0.0

Pixelfarbe 0.5,0.375,0.0

Pixelfarbe 128,96,0

Also wenn du SetColor(0,0,0) machst, dann wird jeder Farbkanal mit 0 multipliziert, und egal was vorher drin war, es gibt dir nur schwarze Pixel.
Gewinner der 6. und der 68. BlitzCodeCompo
 

funkheld

BeitragMo, Aug 15, 2016 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
------------------------------
SetRotation 0
setscale 1.0,1.0
setcolor 255,255,255 >>>>> wenn ich den alleine auf Setcolor 0,0,0 setze ist auch das Image schwarz.
DrawText rot,10,10

------------------------------

Midimaster

BeitragMo, Aug 15, 2016 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
[syntax="bmax"]Bei deinem GRABIMAGE ist nix falsch gelaufen. Dein Bild ist weiterhin grün mit roten Punkt drin. Es wird beim DRAWIMAGE nur falsch gezeichnet!

Du musst vor dem DRAWIMAGE das Setcolor wieder auf 255,255,255 "resetten". Nur so werden die Images in ihren Originalfarben gezeichnet.

BlitzMax: [AUSKLAPPEN]
.....
SetRotation ( rot )
SetImageHandle(bild,35,20)
SetScale 0.8,0.9
SetColor 255,255,255 '***************** diese Zeile fehlte
DrawImage bild,xs,ys

SetRotation 0
SetScale 1.0,1.0
SetColor 0,0,0
DrawText rot,10,10
Flip
Until KeyHit (KEY_ESCAPE)
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

funkheld

BeitragMo, Aug 15, 2016 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine Hilfe.

Ist das ein Fehler in Blitzmax bitte oder ist das so gewollt mit dem Setcolor 255,255,255 resetten vor einem Image.

Danke.
Gruss

Midimaster

BeitragDi, Aug 16, 2016 9:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist eindeutig ein Feature! Du kannst Bilder vor dem Malen damit "einfärben". Zwie Möglichkeiten fallen mir dazu dofort ein. die erste ist ein "Fade-Out". Der Bildschirm wird am Ende der Spielrunde schwarz:
BlitzMax: [AUSKLAPPEN]
Local Hell%=255
Repeat
Cls
If FadeOut=True
Hell=Hell-1
EndIf
SetColor Hell, Hell, Hell
DrawImage Bild,0,0
Flip 1
Until KeyHit(KEY_ESCAPE)


und das zweite sind Schatten:
BlitzMax: [AUSKLAPPEN]

Repeat
Cls
SetColor 255,255,255
DrawImage Hintergrund, 0,0

SetColor 55,55,55
DrawImage Flugzeug, x+20,y+20

SetColor 255,255,255
DrawImage Flugzeug, x,y

Flip 1
Until KeyHit(KEY_ESCAPE)
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

DAK

BeitragDi, Aug 16, 2016 11:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst du dir bitte noch mal meinen Post von oben durchlesen? Da steht exakt beschrieben, was passiert. Und das ist ein enormes Feature.
Gewinner der 6. und der 68. BlitzCodeCompo
 

funkheld

BeitragDi, Aug 16, 2016 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Zuerst müssen die Werte normalisiert werden (auf eine Skala von 0.0-1.0 gebracht werden). Dazu werden sie durch 255 dividiert.


Ich dachte diesen 1.0 Wert gibt es nur in Opengl.

Ich habe doch kein Opengl eingeschaltet.

Gruss

DAK

BeitragDi, Aug 16, 2016 11:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Nö, es ist nur eine andere Skala, damit das Rechnen funktioniert.

Du kannst auch multiplizieren und danach durch 256 dividieren, ist voll wurscht. Hättest du dir das Beispiel durchgelesen und versucht zu behirnen, dann hättest du es verstanden gehabt.

Du kannst davon ausgehen, dass Leute hier Sachen mit einem Sinn posten und verstehen, worum es geht. Wenn es nicht klar ist, dann fragen wir nach. Wir machen das hier schon seit über einem Jahrzehnt Wink
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group