kein blau?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

kein blau?

Beitrag von obbba »

Mit dem code soll ich testen können, wie groß z.B. 40 Pixel sind.

Irgendwie klappt das mit den Farben nicht. RGB(0,128,0) sieht zum Bespiel bestimmt nicht so aus. Und der Blauwert wird gar nicht berücksichtigt.

Probiert erstmal aus. Auf q,w,e,a,s,d verändert man die Farben für das nächste Rechteck. Mit der linken Maustaste kann man das Rechteck ziehen.
Mit der rechten löscht man das letzte Rechteck.

Code: Alles auswählen

Structure objekt
 x.w
 y.w
 laenge.w
 hoehe.w
 farbe.w
EndStructure

NewList viereck.objekt()
NextElement(viereck())

#Breite=1024
#Hoehe=768

#cursor=0


If InitSprite() : EndIf
If InitMouse() : EndIf
If InitKeyboard() : EndIf
If OpenScreen(#Breite,#Hoehe,16,"Groeßenvergleich") : EndIf

CreateImage(#cursor,#Breite/80,#Hoehe/60)
StartDrawing(ImageOutput())
 Box(0,0,#Breite/80,#Hoehe/60,RGB(90,70,70))
 Box(0,0,#Breite/160,#Hoehe/120,RGB(30,130,150))
 Line(0,0,#Breite/80,#Hoehe/60,RGB(30,130,150))
 Line(2,0,#Breite/80,#Hoehe/60,RGB(30,130,150))
 Line(0,2,#Breite/80,#Hoehe/60,RGB(30,130,150))
StopDrawing()



Repeat

 ExamineMouse()
 ExamineKeyboard()
 
 ;{ Farbe
 
 If KeyboardPushed(#PB_Key_Q)
  actrot+1
 EndIf
 If KeyboardPushed(#PB_Key_W)
  actgruen+1
 EndIf
 If KeyboardPushed(#PB_Key_E)
  actblau+1
 EndIf
 If KeyboardPushed(#PB_Key_A)
  actrot-1
 EndIf
 If KeyboardPushed(#PB_Key_S)
  actgruen-1
 EndIf
 If KeyboardPushed(#PB_Key_D)
  actblau-1
 EndIf
 If MouseWheel()<0
  actrot-1
  actblau-1
  actgruen-1
 EndIf
 If MouseWheel()>0
  actrot+1
  actblau+1
  actgruen+1
 EndIf
 
 If actrot<0 : actrot=0 : EndIf
 If actblau<0 : actblau=0 : EndIf
 If actgruen<0 : actgruen=0 : EndIf
 If actrot>155 : actrot=155 : EndIf
 If actblau>155 : actblau=155 : EndIf
 If actgruen>155 : actgruen=155 : EndIf
 ;}
 
 If MouseButton(1)
  AddElement(viereck())
  xjetzt=MouseX()
  yjetzt=MouseY()
  viereck()\x=xjetzt
  viereck()\y=yjetzt
  viereck()\farbe=RGB(actrot,actgruen,actblau)
  Repeat
   viereck()\laenge=MouseX()-xjetzt
   viereck()\hoehe=MouseY()-yjetzt
   ExamineMouse()
   ClearScreen(0,0,0)
   StartDrawing(ScreenOutput())
   DrawingMode(1)
    ForEach viereck()
     Box(viereck()\x,viereck()\y,viereck()\laenge,viereck()\hoehe,viereck()\farbe)
     Locate(viereck()\x,viereck()\y-15)
     FrontColor(Red(viereck()\farbe),Green(viereck()\farbe),Blue(viereck()\farbe))
     DrawText(Str(viereck()\laenge))
     Locate(viereck()\x-5-TextLength(Str(viereck()\hoehe)),viereck()\y)
     FrontColor(Red(viereck()\farbe),Green(viereck()\farbe),Blue(viereck()\farbe))
     DrawText(Str(viereck()\hoehe))
    Next
    DrawImage(UseImage(#cursor),MouseX(),MouseY())
   StopDrawing()
   FlipBuffers()
  Until MouseButton(1)=0
 EndIf
 
 If MouseButton(2) And loeschbereit=1
  LastElement(viereck())
  DeleteElement(viereck())
 EndIf
 
 loeschbereit=0
 If MouseButton(2)=0
  loeschbereit=1
 EndIf
 
 ClearScreen(0,0,0)
 StartDrawing(ScreenOutput())
  DrawingMode(1)
  ForEach viereck()
   Box(viereck()\x,viereck()\y,viereck()\laenge,viereck()\hoehe,viereck()\farbe)
   Locate(viereck()\x,viereck()\y-15)
   FrontColor(Red(viereck()\farbe),Green(viereck()\farbe),Blue(viereck()\farbe))
   DrawText(Str(viereck()\laenge))
   Locate(viereck()\x-5-TextLength(Str(viereck()\hoehe)),viereck()\y)
   FrontColor(Red(viereck()\farbe),Green(viereck()\farbe),Blue(viereck()\farbe))
   DrawText(Str(viereck()\hoehe))
  Next
  DrawImage(UseImage(#cursor),MouseX(),MouseY())
  Locate(20,20)
  FrontColor(155,0,0)
  DrawText(Str(actrot))
  Locate(60,20)
  FrontColor(0,155,0)
  DrawText(Str(actgruen))
  Locate(100,20)
  FrontColor(0,0,155)
  DrawText(Str(actblau))
  Locate(140,20)
  FrontColor(155,155,155)
  DrawText("ESC-Ende")
 StopDrawing() 
 FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

End
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

1. in der structure "objekt" muss
farbe.w
geändert werden in
farbe.l
denn rgb()-werte sind 24 bit, also brauchst du 4 byte (long) und nicht nur 2 (word).

2. die obergrenze der einzelnen farb-bytes ist 255 und nicht 155, also:

Code: Alles auswählen

 If actrot>255 : actrot=255 : EndIf
 If actblau>255 : actblau=255 : EndIf
 If actgruen>255 : actgruen=255 : EndIf
(3. die if klauseln haben keine wirkung

Code: Alles auswählen

If InitSprite() : EndIf
If InitMouse() : EndIf
If InitKeyboard() : EndIf
If OpenScreen(#Breite,#Hoehe,16,"Groeßenvergleich") : EndIf
)
Zuletzt geändert von #NULL am 12.06.2006 23:30, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

Beitrag von obbba »

danke
Antworten