Bildprogramm

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Yankee

Betreff: Bildprogramm

BeitragDo, Aug 03, 2006 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
heu war mir ma wieder langweilig Laughing und da hab ich ein bildprogramm erstellt. So nun 2 probleme, bei denen ihr mir vllt helfen könntet:
Also ich erstelle 3 Dims:
Code: [AUSKLAPPEN]

Dim bildr(480,640) ;rot
Dim bildb(480,640) ;blau
Dim bildg(480,640) ;brün

und immer wenn ich mousedown(1) drücke, wird da auf der position
Code: [AUSKLAPPEN]

bildr(MouseY(),MouseX()) = r
bildg(MouseY(),MouseX()) = g
bildb(MouseY(),MouseX()) = b

halt die aktuelle farbe gespeichert
(ihrgendwie ziehmlich verwirrden...)
Hier der ganze code
Code: [AUSKLAPPEN]

;mein end kompöiziertes programm
;von Yankee
;_____________________________________________________________________________________________________
Graphics 640,480
SetBuffer BackBuffer()
SeedRnd MilliSecs()

;für das Fadenkreuz in nem malprogramm..... löl oder^^
Global faden = 5

;die jeweiligen farben
Global r=0,g=0,b=0

;für FPS
Global fps_frames, fps_ms,fps

;für die daten...
Global d_r=Rnd(0,255),d_g=Rnd(0,255),d_b=Rnd(0,255)
Global dplus_r=Rnd(0,1),dplus_g=Rnd(0,1),dplus_b=Rnd(0,1)

;diese function hier, weil wenn man Rnd(-1,1) macht, kann immer noch ne 0 rauskommen und das ist doof
AnfangDatenFarbenAuswaehlen()

;variablen für die "daten", wo die info steht
Global daten_x = 10

;die ganzen farben speichern
Dim bildr(480,640) ;rot
Dim bildb(480,640) ;blau
Dim bildg(480,640) ;brün
   
NeuesBild()

;hauptschleife
While Not KeyHit(1)
   Cls
   ;BildMalen()
   DatenAnzeigen()
   DatenFarbeAendern()
   MausZeugs()
   If MouseDown(1) Then NeuesPixel()
   Text 0,0,fps()
   Flip
Wend


;-----------------------------------------------------------------------------------------------------
;ab hier alle functionen   
;_____________________________________________________________________________________________________

;das bild malen   
Function BildMalen()
   For x = 1 To 640
      For y = 1 To 480
         Color bildr(x,y),bildg(x,y),bildb(x,y)
         Rect x,y,1,1,1
      Next
   Next
End Function

;ein neues bild malen
Function NeuesBild()
   For y = 1 To 480
      For x = 1 To 640
         bildr(x,y) = 255
         bildg(x,y) = 255
         bildb(x,y) = 255
      Next
   Next
End Function

Function DatenAnzeigen()
   ;zum ausweichen der maus^^
   If (MouseX() < 250 And MouseY() < 50) Then daten_x = 400
   If (MouseX() > 400 And MouseY() < 50) Then daten_x = 10
   Color d_r,d_g,d_b
   Text daten_x, 10, "F1 zum ändern der Farben"
   Text daten_x, 20, "F2 um ein bild zu Laden"
   Text daten_x, 30, "F3 oder zum speichern"
End Function

Function AnfangDatenFarbenAuswaehlen()
   ;wenn 1 dann 1, wenn 0 dann -1
   ;rot
   If dplus_r = 0 Then
      dplus_r = -1
   Else
      dplus_r = 1
   EndIf
   ;blau
   If dplus_g = 0 Then
      dplus_g = -1
   Else
      dplus_g = 1
   EndIf
   ;grün
   If dplus_b = 0 Then
      dplus_b = -1
   Else
      dplus_b = 1
   EndIf
End Function

Function DatenFarbeAendern()
   d_r = d_r + dplus_r
   d_g = d_g + dplus_g
   d_b = d_b + dplus_b
   ;die richtichtung dann ändern oder wie des heist^^
   If (d_r < 1 Or d_r > 254) Then dplus_r = -dplus_r
   If (d_g < 1 Or d_g > 254) Then dplus_g = -dplus_g
   If (d_b < 1 Or d_b > 254) Then dplus_b = -dplus_b
End Function

Function NeuesPixel()
   bildr(MouseY(),MouseX()) = r
   bildg(MouseY(),MouseX()) = g
   bildb(MouseY(),MouseX()) = b
End Function   
   
Function MausZeugs()
   ;ein geiles Fadenkreuz^^
   Color 50,100,150
   Oval MouseX()-15,MouseY()-15,30,30,0
   Line MouseX()-15,MouseY(),MouseX()-faden,MouseY()
   Line MouseX()+14,MouseY(),MouseX()+faden,MouseY()
   Line MouseX(),MouseY()-15,MouseX(),MouseY()-faden
   Line MouseX(),MouseY()+14,MouseX(),MouseY()+faden
End Function

Function fps()
fps_frames = fps_frames +1
If MilliSecs()-fps_ms >= 1000 Then
     fps_ms = MilliSecs()
     fps = fps_frames
    fps_frames = 0
EndIf
Return fps
End Function

Also mein problem:
Die funktion BildMalen ist extrem langsam, aber ich weis net, wie ich es schneller machen könnte. Mit Create Image, immer wenn MouseDown(1) True ist? Oder einfach am anfang ein neues bild machen und dann das vohrige Bild(ohne mauskreuz und info) speichern und dann CreateImage machen und einfach LoadImage (vohriges Bild) und dann Plot MouseX(),Mousey() ???
Bitte brauche Hilfe! ^^
und äh ja noch ein wesentlicher fehler
ihrgendwie malt der den Plot nie dahin, wo MouseX() und MouseY() eigentlich sind, sondern immer spiegelverkehrt.
(Wenn Debug aus ist klappts, wenn er an ist net Sad((((((( )

Kann jmd helfen?

mfg

Yankee
Um so kleiner der code, um so schwieriger den Fehler zu finden:


Siehst du den Fehler?
Klick mal hier drauf... hehehe

Triton

BeitragFr, Aug 04, 2006 2:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, und nächstes mal setzen wir Codetags richtig und bemühen uns, die Rechtschreibung nicht ganz so arg verkommen zu lassen.

Zitat:
und da hab ich ein bildprogramm erstellt

Und das soll was machen? So recht macht das Programm bei mir nichts, außer buntem Text Smile

Zitat:
Die funktion BildMalen ist extrem langsam

Es ist kein Wunder, wenn es langsam ist, wenn du jeden einzelnen der Pixel mit Rect zeichnest. Writepixel und Writepixelfast können hier helfen.
Ein Bild zu erstellen und Veränderungen darein zu zeichnen und dann dieses Bild ganz normal mit Drawimage/Drawblock zeichnen ist noch die beste Möglichkeit.

Zitat:
Oder einfach am anfang ein neues bild machen und dann das vohrige Bild(ohne mauskreuz und info) speichern und dann CreateImage machen und einfach LoadImage (vohriges Bild) und dann Plot MouseX(),Mousey() ???

Ist wohl schon zu spät.

Hä? Smile

Zitat:
Bitte brauche Hilfe! ^^

Oh ja.


Code: [AUSKLAPPEN]
Dim bildr(480,640) ;rot
Dim bildb(480,640) ;blau
Dim bildg(480,640) ;brün


mach daraus erstmal schon besser

Code: [AUSKLAPPEN]
Dim bildr(639,479)
Dim bildb(639,479) ;blau
Dim bildg(639,479) ;brün
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Markus2

BeitragFr, Aug 04, 2006 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Und aus

bildr(MouseY(),MouseX()) = r
bildg(MouseY(),MouseX()) = g
bildb(MouseY(),MouseX()) = b

das hier weil die Maus ja bewegt werden kann

mx=MouseX()
my=MouseY()

bildr(mx,my) = r
bildg(mx,my) = g
bildb(mx,my) = b

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group