FreeBasic: Grafik Beispiel
Natürlich sollte man bei ernsten Projekten Oberflächen auf keinen Fall mit den Grafikbefehlen erstellen, aber für den Wissensstand, den du aktuell haben solltest, ist das genau das Richtige. Du kannst es zur Übung auch noch erweitern. Mit "s" speichert man ab, das Bild landet im Ordner der .exe-Datei. Mit "e" wird das Programm beendet. Viel Spaß damit :). Auf älteren Computer wird es nur langsam bis gar nicht laufen. In diesem Fall ändere in Zeile 103 "sleep 10" zu "sleep 100" um. Es ist sicher nicht sauber programmiert, aber es soll ja auch nur zeigen, was die Grafikbefehle alles können.
dim xrand as integer=640
dim yrand as integer=480
WINDOWTITLE "Pset Bitmap"
screen 19,24
Line (0,0)-(xrand+160,yrand+120),RGB(255,255,255),bf
dim Taste2 as string
dim Mauspos as string
dim xpos as string
dim ypos as string
dim Radius as integer=50
dim key as string
dim Pinsel as integer
dim x1 as integer
dim x2 as integer
dim y1 as integer
dim y2 as integer
dim Taste as integer
dim Rad as integer
dim x as integer
dim y as integer
dim b1 as string
dim a1 as string
dim c1 as string
dim b2 as string
dim a2 as string
dim c2 as string
dim b3 as string
dim a3 as string
dim c3 as string
dim Farbe3 as integer
dim Farbe2 as integer
dim Farbe1 as integer
dim Farbe4 as integer
dim Farbe5 as integer
dim Farbe6 as integer
dim Farbe7 as integer
dim Farbe8 as integer
dim Farbe9 as integer
dim Rot as integer=0
dim Blau as integer=0
dim Gruen as integer=0
Dim As Integer breit,hoch
Dim bild As Any Ptr
dim Modus as integer=1
dim key2 as string
dim Funktion as string
dim Bildname as string="neues_Bild.bmp"
dim Bildzwischenspeicher as string
bild=IMAGECREATE(xrand,yrand,RGB(255,255,255))
line(xrand+1,0)-(xrand+1,yrand),2
line(xrand+2,0)-(xrand+2,yrand+1),2
line(0,yrand+1)-(xrand+1,yrand+1),2
line(0,yrand+2)-(xrand+2,yrand+2),2
line(9,yrand+19)-(101,yrand+111),2,b
line(10,yrand+20)-(100,yrand+110),2,bf
line(110,yrand+20)-(245,yrand+50),2,b
line(110,yrand+35)-(245,yrand+35),2
line(125,yrand+20)-(125,yrand+50),2
line(140,yrand+20)-(140,yrand+50),2
line(155,yrand+20)-(155,yrand+50),2
line(170,yrand+20)-(170,yrand+50),2
line(185,yrand+20)-(185,yrand+50),2
line(200,yrand+20)-(200,yrand+50),2
line(215,yrand+20)-(215,yrand+50),2
line(230,yrand+20)-(230,yrand+50),2
line(245,yrand+20)-(245,yrand+50),2
line(111,yrand+36)-(124,yrand+49),RGB(255,255,255),bf
line(111,yrand+21)-(124,yrand+34),RGB(0,0,0),bf
line(126,yrand+36)-(139,yrand+49),RGB(200,200,200),bf
line(126,yrand+21)-(139,yrand+34),RGB(100,100,100),bf
line(141,yrand+21)-(154,yrand+34),RGB(255,0,0),bf
line(141,yrand+36)-(154,yrand+49),RGB(255,60,80),bf
line(156,yrand+21)-(169,yrand+34),RGB(0,255,0),bf
line(156,yrand+36)-(169,yrand+49),RGB(154,255,0),bf
line(171,yrand+21)-(184,yrand+34),RGB(0,0,255),bf
line(171,yrand+36)-(184,yrand+49),RGB(0,168,255),bf
line(186,yrand+21)-(199,yrand+34),RGB(255,255,0),bf
line(186,yrand+36)-(199,yrand+49),RGB(255,255,150),bf
line(201,yrand+21)-(214,yrand+34),RGB(255,170,0),bf
line(201,yrand+36)-(214,yrand+49),RGB(255,190,200),bf
line(216,yrand+21)-(229,yrand+34),RGB(255,0,255),bf
line(216,yrand+36)-(229,yrand+49),RGB(255,120,255),bf
line(231,yrand+21)-(244,yrand+34),RGB(0,255,255),bf
line(231,yrand+36)-(244,yrand+49),RGB(150,255,255),bf
line(260,yrand+20)-(400,yrand+110),2,b
circle(270,yrand+30),5,2,,,1
circle(285,yrand+35),10,2,,,1
circle(310,yrand+40),15,2,,,1
circle(345,yrand+45),20,2,,,1
do
do
sleep 10
getmouse x,y,Rad,Taste
key2 = inkey
line(xrand,yrand)-(xrand+50,yrand+30),RGB(255,255,255),bf
xpos=str(x)
ypos=str(y)
mauspos="x="+xpos
draw string (xrand,yrand),mauspos,2
mauspos="y="+ypos
draw string (xrand,yrand+12),mauspos,2
line(xrand+2,0)-(xrand+2,yrand+1),2
line(0,yrand+1)-(xrand+1,yrand+1),2
line(0,yrand+2)-(xrand+2,yrand+2),2
line(xrand+5,10)-(xrand+35,40),RGB(255,255,255),bf
line(xrand+5,10)-(xrand+35,40),2,b
circle(xrand+20,25),12,2,,,1
line(xrand+45,10)-(xrand+75,40),RGB(255,255,255),bf
line(xrand+45,10)-(xrand+75,40),2,b
line(xrand+50,35)-(xrand+70,15),2
line(xrand+85,10)-(xrand+115,40),2,b
circle(xrand+100,25),15,RGB(255,0,0)
circle(xrand+100,25),12,RGB(0,255,0),,,1
circle(xrand+100,25),9,RGB(0,0,255),,,1
line(xrand+125,10)-(xrand+155,40),RGB(255,255,255),bf
line(xrand+125,10)-(xrand+155,40),2,b
line(xrand+130,15)-(xrand+150,35),2,b
line(xrand+131,16)-(xrand+149,34),2,b
if x>xrand+5 and x<xrand+35 and y>10 and y<40 then
line(xrand+5,10)-(xrand+35,40),RGB(255,217,15),bf
line(xrand+5,10)-(xrand+35,40),2,b
circle(xrand+20,25),12,2,,,1
elseif x>xrand+45 and x<xrand+75 and y>10 and y<40 then
line(xrand+45,10)-(xrand+75,40),RGB(255,217,15),bf
line(xrand+45,10)-(xrand+75,40),2,b
line(xrand+50,35)-(xrand+70,15),2
elseif x>xrand+85 and x<xrand+115 and y>10 and y<40 then
line(xrand+85,10)-(xrand+115,40),RGB(255,217,15),b
circle(xrand+100,25),15,RGB(255,0,0)
circle(xrand+100,25),12,RGB(0,255,0),,,1
circle(xrand+100,25),9,RGB(0,0,255),,,1
elseif x>xrand+125 and x<xrand+155 and y>10 and y<40 then
line(xrand+125,10)-(xrand+155,40),RGB(255,217,15),bf
line(xrand+125,10)-(xrand+155,40),2,b
line(xrand+130,15)-(xrand+150,35),2,b
line(xrand+131,16)-(xrand+149,34),2,b
end if
if Taste=1 and x>xrand+5 and x<xrand+35 and y>10 and y<40 then
line(xrand+5,10)-(xrand+35,40),RGB(255,0,0),bf
line(xrand+5,10)-(xrand+35,40),2,b
circle(xrand+20,25),12,2,,,1
Modus=1
elseif Taste=1 and x>xrand+45 and x<xrand+75 and y>10 and y<40 then
line(xrand+45,10)-(xrand+75,40),RGB(255,0,0),bf
line(xrand+45,10)-(xrand+75,40),2,b
line(xrand+50,35)-(xrand+70,15),2
Modus=2
elseif Taste=1 and x>xrand+85 and x<xrand+115 and yrand>10 and y<40 then
circle(xrand+100,25),15,RGB(255,0,0),,,1
circle(xrand+100,25),12,RGB(0,255,0),,,1
circle(xrand+100,25),9,RGB(0,0,255),,,1
line(xrand+85,10)-(xrand+115,40),RGB(255,0,0),b
Modus=5
elseif Taste=1 and 110 and 245 and y>yrand+20 and y<yrand+50 then
if Taste=1 and x>111 and x<124 and y>yrand+21 and y<yrand+34 then
Rot=0
Blau=0
Gruen=0
elseif Taste=1 and x>126 and x<139 and y>yrand+21 and y<yrand+34 then
Rot=100
Blau=100
Gruen=100
elseif Taste=1 and x>141 and x<154 and y>yrand+21 and y<yrand+34 then
Rot=255
Blau=0
Gruen=0
elseif Taste=1 and x>156 and x<169 and y>yrand+21 and y<yrand+34 then
Rot=0
Blau=0
Gruen=255
elseif Taste=1 and x>171 and x<184 and y>yrand+21 and y<yrand+34 then
Rot=0
Gruen=0
Blau=255
elseif Taste=1 and x>186 and x<199 and y>yrand+21 and y<yrand+34 then
Rot=255
Gruen=255
Blau=0
elseif Taste=1 and x>201 and x<214 and y>yrand+21 and y<yrand+34 then
Rot=255
Gruen=170
Blau=0
elseif Taste=1 and x>216 and x<229 and y>yrand+21 and y<yrand+34 then
Rot=255
Gruen=0
Blau=255
elseif Taste=1 and x>231 and x<244 and y>yrand+21 and y<yrand+34 then
Rot=0
Gruen=255
Blau=255
elseif Taste=1 and x>111 and x<124 and y>yrand+36 and y<yrand+49 then
Rot=255
Blau=255
Gruen=255
elseif Taste=1 and x>126 and x<139 and y>yrand+36 and y<yrand+49 then
Rot=200
Blau=200
Gruen=200
elseif Taste=1 and x>141 and x<154 and y>yrand+36 and y<yrand+49 then
Rot=255
Blau=60
Gruen=80
elseif Taste=1 and x>156 and x<169 and y>yrand+36 and y<yrand+49 then
Rot=154
Blau=255
Gruen=0
elseif Taste=1 and x>171 and x<184 and y>yrand+36 and y<yrand+49 then
Rot=0
Gruen=168
Blau=255
elseif Taste=1 and x>186 and x<199 and y>yrand+36 and y<yrand+49 then
Rot=255
Gruen=255
Blau=150
elseif Taste=1 and x>201 and x<214 and y>yrand+36 and y<yrand+49 then
Rot=255
Gruen=190
Blau=200
elseif Taste=1 and x>216 and x<229 and y>yrand+36 and y<yrand+49 then
Rot=255
Gruen=120
Blau=255
elseif Taste=1 and x>231 and x<244 and y>yrand+36 and y<yrand+49 then
Rot=150
Gruen=255
Blau=255
end if
line(9,yrand+19)-(101,yrand+111),2,b
line(10,yrand+20)-(100,yrand+110),RGB(Rot,Gruen,Blau),bf
elseif Taste=1 and x>xrand+125 and x<xrand+155 and y>10 and y<40 then
line(xrand+125,10)-(xrand+155,40),RGB(255,0,0),bf
line(xrand+125,10)-(xrand+155,40),2,b
line(xrand+130,15)-(xrand+150,35),2,b
line(xrand+131,16)-(xrand+149,34),2,b
Modus=12
end if
if key2="s" then Modus=0
if key2="e" then Modus=4
if Modus=1 then
line(xrand+5,10)-(xrand+35,40),RGB(255,0,0),bf
line(xrand+5,10)-(xrand+35,40),2,b
circle(xrand+20,25),12,2,,,1
if Radius=25 then
line(265,yrand+25)-(275,yrand+35),2,b
end if
elseif Modus=2 then
line(xrand+45,10)-(xrand+75,40),RGB(255,0,0),bf
line(xrand+45,10)-(xrand+75,40),2,b
line(xrand+50,35)-(xrand+70,15),2
elseif Modus=5 then
circle(xrand+100,25),15,RGB(255,0,0),,,1
circle(xrand+100,25),12,RGB(0,255,0),,,1
circle(xrand+100,25),9,RGB(0,0,255),,,1
line(xrand+85,10)-(xrand+115,40),RGB(255,0,0),b
elseif Modus=12 then
line(xrand+125,10)-(xrand+155,40),RGB(255,0,0),bf
line(xrand+125,10)-(xrand+155,40),2,b
line(xrand+130,15)-(xrand+150,35),2,b
line(xrand+131,16)-(xrand+149,34),2,b
end if
loop until Taste=1 or key2<>""
if Modus=1 then
line(xrand+5,10)-(xrand+35,40),RGB(255,0,0),bf
line(xrand+5,10)-(xrand+35,40),2,b
circle(xrand+20,25),12,2,,,1
do
line(261,yrand+21)-(399,yrand+109),RGB(255,255,255),bf
circle(270,yrand+30),5,2,,,1
circle(285,yrand+35),10,2,,,1
circle(310,yrand+40),15,2,,,1
circle(345,yrand+45),20,2,,,1
if Radius=25 then
line(265,yrand+25)-(275,yrand+35),2,b
end if
getmouse x,y,Rad,Taste
if Taste=1 and x<275 and x>265 and y>yrand+25 and y<yrand+35 then
Radius=25
line(265,yrand+25)-(275,yrand+35),2,b
elseif Taste=1 and x<295 and x>275 and y>yrand+25 and y<yrand+45 then
Radius=50
elseif Taste=1 and x<325 and x>295 and y>yrand+25 and y<yrand+55 then
Radius=75
end if
loop Until Taste=1
x1 = x
y1 = y
if x1<xrand and y1<yrand then
circle bild,(x1,y1),Radius,RGB(Rot,Gruen,Blau),,,1
circle (x1,y1),Radius,RGB(Rot,Gruen,Blau) ,,,1
end if
elseif Modus=2 then
line(xrand+45,10)-(xrand+75,40),RGB(255,0,0),bf
line(xrand+45,10)-(xrand+75,40),2,b
line(xrand+50,35)-(xrand+70,15),2
do
line(261,yrand+21)-(399,yrand+109),RGB(255,255,255),bf
getmouse x,y,Rad,Taste
loop Until Taste=1
x1 = x
y1 = y
do
getmouse x,y,Rad,Taste
loop Until Taste=0
x2=x
y2=y
if x1<xrand and y1<yrand then
if x2<xrand and y2<yrand then
Line bild,(x1,y1)-(x2,y2),RGB(Rot,Gruen,Blau)
Line (x1,y1)-(x2,y2),RGB(Rot,Gruen,Blau)
end if
end if
elseif Modus=4 then end
elseif Modus=5 then
line(261,yrand+21)-(399,yrand+109),RGB(255,255,255),bf
circle(xrand+100,25),15,RGB(255,0,0),,,1
circle(xrand+100,25),12,RGB(0,255,0),,,1
circle(xrand+100,25),9,RGB(0,0,255),,,1
line(xrand+85,10)-(xrand+115,40),RGB(255,0,0),b
do
a1=inkey
sleep 500
loop until a1<>""
do
b1=inkey
sleep 500
loop until b1<>""
do
c1=inkey
sleep 500
loop until c1<>""
do
a2=inkey
sleep 500
loop until a2<>""
do
b2=inkey
sleep 500
loop until b2<>""
do
c2=inkey
sleep 500
loop until c2<>""
do
a3=inkey
sleep 500
loop until a3<>""
do
b3=inkey
sleep 500
loop until b3<>""
do
c3=inkey
sleep 500
loop until c3<>""
Farbe1=val(a1)*100
Farbe2=val(b1)*10
Farbe3=val(c1)
Farbe4=val(a2)*100
Farbe5=val(b2)*10
Farbe6=val(c2)
Farbe7=val(a3)*100
Farbe8=val(b3)*10
Farbe9=val(c3)
Rot=Farbe1+Farbe2+Farbe3
Gruen=Farbe4+Farbe5+Farbe6
Blau=Farbe7+Farbe8+Farbe9
if Rot > 255 or Gruen > 255 or Blau > 255 then
Blau=0
Rot=0
Gruen=0
end if
line(9,yrand+19)-(101,yrand+111),2,b
line(10,yrand+20)-(100,yrand+110),RGB(Rot,Gruen,Blau),bf
Modus=1
elseif Modus=0 then
Bsave Bildname, bild
elseif Modus=9 then
Bildname=""
do
Bildzwischenspeicher=inkey
Bildname=Bildname+Bildzwischenspeicher
loop until Bildzwischenspeicher="p"
elseif Modus=8 then
do
getmouse x,y,Rad,Taste
loop until Taste=1 or key<>""
if Pinsel=1 then
do
getmouse x,y,Rad,Taste
loop until Taste=1
Pset (x,y),RGB(Rot,Gruen,Blau)
Pset (x+1,y),RGB(Rot,Gruen,Blau)
Pset (x,y+1),RGB(Rot,Gruen,Blau)
Pset (x+1,y+1),RGB(Rot,Gruen,Blau)
Pset (x-1,y),RGB(Rot,Gruen,Blau)
Pset (x,y-1),RGB(Rot,Gruen,Blau)
Pset (x-1,y-1),RGB(Rot,Gruen,Blau)
Pset bild,(x,y),RGB(Rot,Gruen,Blau)
Pset bild,(x+1,y),RGB(Rot,Gruen,Blau)
Pset bild,(x,y+1),RGB(Rot,Gruen,Blau)
Pset bild,(x+1,y+1),RGB(Rot,Gruen,Blau)
Pset bild,(x-1,y),RGB(Rot,Gruen,Blau)
Pset bild,(x,y-1),RGB(Rot,Gruen,Blau)
Pset bild,(x-1,y-1),RGB(Rot,Gruen,Blau)
elseif Pinsel=2 then
do
getmouse x,y,Rad,Taste
loop until Taste=1
Pset (x,y),RGB(Rot,Gruen,Blau)
Pset (x+1,y),RGB(Rot,Gruen,Blau)
Pset (x,y+1),RGB(Rot,Gruen,Blau)
Pset (x+1,y+1),RGB(Rot,Gruen,Blau)
Pset (x-1,y),RGB(Rot,Gruen,Blau)
Pset (x,y-1),RGB(Rot,Gruen,Blau)
Pset (x-1,y-1),RGB(Rot,Gruen,Blau)
Pset (x+2,y),RGB(Rot,Gruen,Blau)
Pset (x,y+2),RGB(Rot,Gruen,Blau)
Pset (x+2,y+2),RGB(Rot,Gruen,Blau)
Pset (x-2,y),RGB(Rot,Gruen,Blau)
Pset (x-2,y-2),RGB(Rot,Gruen,Blau)
Pset (x,y-2),RGB(Rot,Gruen,Blau)
Pset bild,(x,y),RGB(Rot,Gruen,Blau)
Pset bild,(x+1,y),RGB(Rot,Gruen,Blau)
Pset bild,(x,y+1),RGB(Rot,Gruen,Blau)
Pset bild,(x+1,y+1),RGB(Rot,Gruen,Blau)
Pset bild,(x-1,y),RGB(Rot,Gruen,Blau)
Pset bild,(x,y-1),RGB(Rot,Gruen,Blau)
Pset bild,(x-1,y-1),RGB(Rot,Gruen,Blau)
Pset bild,(x+2,y),RGB(Rot,Gruen,Blau)
Pset bild,(x,y+2),RGB(Rot,Gruen,Blau)
Pset bild,(x+2,y+2),RGB(Rot,Gruen,Blau)
Pset bild,(x-2,y),RGB(Rot,Gruen,Blau)
Pset bild,(x-2,y-2),RGB(Rot,Gruen,Blau)
Pset bild,(x,y-2),RGB(Rot,Gruen,Blau)
elseif Pinsel=3 then
do
getmouse x,y,Rad,Taste
loop until Taste=1
line(x-5,y+5)-(x+5,y-5),RGB(Rot,Gruen,Blau),bf
line bild,(x-5,y+5)-(x+5,y-5),RGB(Rot,Gruen,Blau),bf
end if
elseif Modus=10 then
do
key=inkey
loop until key<>""
if key="1" then
Pinsel=1
elseif key="s" then
Pinsel=2
elseif key="2" then
Pinsel=3
end if
key=""
elseif Modus=11 then
do
getmouse x,y,Rad,Taste
loop until Taste=1
line(x-5,y+5)-(x+5,y-5),RGB(255,255,255),bf
line bild,(x-5,y+5)-(x+5,y-5),RGB(255,255,255),bf
elseif Modus=12 then
do
line(261,yrand+21)-(399,yrand+109),RGB(255,255,255),bf
getmouse x,y,Rad,Taste
loop Until Taste=1
x1 = x
y1 = y
do
getmouse x,y,Rad,Taste
loop Until Taste=0
x2=x
y2=y
if x1<xrand and y1<yrand and x2<xrand and y2<yrand then
Line (x1,y1)-(x2,y2),RGB(Rot,Gruen,Blau),b
Line bild,(x1,y1)-(x2,y2),RGB(Rot,Gruen,Blau),b
end if
elseif Modus=13 then
do
getmouse x,y,Rad,Taste
loop Until Taste=1
x1 = x
y1 = y
do
getmouse x,y,Rad,Taste
loop Until Taste=0
x2=x
y2=y
Line (x1,y1)-(x2,y2),RGB(Rot,Gruen,Blau),bf
Line bild,(x1,y1)-(x2,y2),RGB(Rot,Gruen,Blau),bf
end if
LOOP
Dieser Quellcode wurde von Stueber am 22.03.2009 mit der Freebasic Version 0.20b getestet.