http://alpha-thema-online.uv.ro
Fa-ti si tu propriul forum, pe www.myforum.ro!
Pagina de start a forumului http://alpha-thema-online.uv.ro Autentificare Inregistrare FAQ Membri Cautare

Pagina de start a forumului http://alpha-thema-online.uv.ro » Exemple Coduri » Un fel de Paint
Creaza un subiect nou  Raspunde la subiect Subiectul anterior :: Subiectul urmator 
Un fel de Paint
MesajTrimis: 06/07/2007 09:26 Raspunde cu citat (quote)
Ad_Infinitum
Administrator
Administrator
Ad_Infinitum
Data inscrierii: 23/Iun/2007
Mesaje: 212




sync on
sync rate 0
set text font "Arial"
set text size 16
set image colorkey 0,255,255
randomize timer()

#Constant TRUE 1
#Constant FALSE 0

make_image_memblock(1,512,512,32)
memblock_box(1,1,1,512,512,rgb(0,0,0))
mode=1
gosub example_update

do
sync
i=val(inkey$())
if i>0 and i<6
mode=i
update=TRUE
if mode=5
memblock_box(1,1,1,512,512,rgb(0,0,0))
mode=1
endif
endif

px=mx
py=my
mx=mousex()
my=mousey()

if mouseclick()=TRUE
if mx<512 and my<512 and mx>0 and my>0
select mode
case 1
memblock_dot(1,mx,my,rgb(rnd(255),rnd(255),rnd(255)))
endcase
case 2
memblock_line(1,px,py,mx,my,rgb(rnd(255),rnd(255),rnd(255)))
endcase
case 3
memblock_circle(1,mx,my,rnd(24)+1,rgb(rnd(255),rnd(255),rnd(255)))
endcase
case 4
memblock_box(1,px,py,mx,my,rgb(rnd(255),rnd(255),rnd(255)))
endcase
case default
exit prompt "Drawing mode does not exist.","Error!"
end
endcase
endselect
update=TRUE
endif
endif

if update=TRUE
gosub example_update
endif
loop
end

example_update:
cls 0
make image from memblock 1,1
ink -1,0
box 0,0,520,520
paste image 1,0,0,0
text 530,0,"1) Draw Dot"
text 530,20,"2) Draw Line"
text 530,40,"3) Draw Circle"
text 530,60,"4) Draw Box"
text 530,80,"5} Clear Drawing"
text 530,100,"Current Mode "+str$(mode)
update=FALSE
return

`Functions:
`---------------------------------------------------------------------------------
`Create a memblock which will be used for images
`---------------------------------------------------------------------------------
function make_image_memblock(memblock,width,height,depth)
make memblock memblock,width*height*depth*4+12
write memblock dword memblock,0,width
write memblock dword memblock,4,height
write memblock dword memblock,8,depth
endfunction


`---------------------------------------------------------------------------------
`Change a pixel in an image memblock to a specified color
`---------------------------------------------------------------------------------
function memblock_dot(memblock,xcoord,ycoord,colour as dword)
width=memblock dword(memblock,0)
write memblock dword memblock,((ycoord-1)*width+xcoord-1)*4+12,colour
endfunction

`---------------------------------------------------------------------------------
`Change a line of pixels in an image memblock to a specified color
`---------------------------------------------------------------------------------
function memblock_line(memblock,x1,y1,x2,y2,colour as dword)
width=memblock dword(memblock,0)
if abs(x2-x1)>abs(y2-y1)
m#=(y2-y1+0.0)/(x2-x1+0.0)
b#=y1-m#*x1
minx=min(x1,x2)
maxx=max(x1,x2)
for ix=minx to maxx
iy=int(m#*ix+b#+0.5)
write memblock dword memblock,((iy-1)*width+ix-1)*4+12,colour
next ix
else
miny=min(y1,y2)
maxy=max(y1,y2)
if x2=x1
for iy=miny to maxy
write memblock dword memblock,((iy-1)*width+x1-1)*4+12,colour
next iy
else
m#=(x2-x1+0.0)/(y2-y1+0.0)
b#=y1-1/m#*x1
for iy=miny to maxy
ix=int(m#*(iy-b#)+0.5)
write memblock dword memblock,((iy-1)*width+ix-1)*4+12,colour
next ix
endif
endif
endfunction

`---------------------------------------------------------------------------------
`Change a box of pixels in an image memblock to a specified color
`---------------------------------------------------------------------------------
function memblock_box(memblock,left,top,right,bottom,colour as dword)
width=memblock dword(memblock,0)
minx=min(left,right)
maxx=max(left,right)
miny=min(top,bottom)
maxy=max(top,bottom)
for x=minx to maxx
for y=miny to maxy
memblock_dot(memblock,x,y,colour)
next y
next x
endfunction

`---------------------------------------------------------------------------------
`Creates a circle of pixels in an image memblock to a specified color
`---------------------------------------------------------------------------------
function memblock_circle(memblock,centerx,centery,radius,colour as dword)
bx=centerx-radius
py1=centery+sqrt(radius^2-(bx-centerx)^2)
py2=centery-sqrt(radius^2-(bx-centerx)^2)
ex=centerx+radius
width=memblock dword(memblock,0)
size=get memblock size(1)
for x=bx to ex
y1=centery+sqrt(radius^2-(x-centerx)^2)
y2=centery-sqrt(radius^2-(x-centerx)^2)
miny=min(py1,y1)
maxy=max(py1,y1)
for y=miny to maxy
pos=((y-1)*width+x-1)*4+12
if pos>11 and pos<size
write memblock dword memblock,pos,colour
endif
next y
miny=min(py2,y2)
maxy=max(py2,y2)
for y=miny to maxy
pos=((y-1)*width+x-1)*4+12
if pos>11 and pos<size
write memblock dword memblock,pos,colour
endif
next y
py1=y1
py2=y2
next x
endfunction

`---------------------------------------------------------------------------------
`Returns the minimum of two values
`---------------------------------------------------------------------------------
function min(value1#,value2#)
if value1#<value2#
a#=value1#
else
a#=value2#
endif
endfunction a#

`---------------------------------------------------------------------------------
`Returns the maximum of two values
`---------------------------------------------------------------------------------
function max(value1#,value2#)
if value1#>value2#
a#=value1#
else
a#=value2#
endif
endfunction a#





------------------------------ScreenShot----------------------------------

Un fel de Paint Un fel de Paint
Vezi profilul utilizatorului Trimite mesaj privat

Un fel de Paint
 Pagina de start a forumului http://alpha-thema-online.uv.ro » Exemple Coduri
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum
Ora este GMT + 3 ore  
Pagina 1 din 1  

  
  
 Creaza un subiect nou  Raspunde la subiect  


Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
    Powered by phpBB © 2001-2004 phpBB Group. phpBB Skin by Vjacheslav Trushkin.