Seite 1 von 1

kein blau?

Verfasst: 12.06.2006 23:01
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

Verfasst: 12.06.2006 23:27
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
)

Verfasst: 12.06.2006 23:29
von obbba
danke