Added boundary fill, and removed unused variables.
This commit is contained in:
parent
89602f1804
commit
bbdb7a3033
3 changed files with 213 additions and 135 deletions
|
|
@ -1,140 +1,139 @@
|
||||||
sub loadpalette(palname as string,palarray() as _unsigned long)
|
sub loadpalette(palname as string,palarray() as _unsigned long)
|
||||||
dim slso8(7) as _unsigned long
|
select case lcase$(palname)
|
||||||
select case lcase$(palname)
|
|
||||||
case "slso8"
|
case "slso8"
|
||||||
redim palarray(7) as _unsigned long
|
redim palarray(7) as _unsigned long
|
||||||
palarray(0)=&hff0d2b45
|
palarray(0)=&HFF0D2B45
|
||||||
palarray(1)=&hff203c56
|
palarray(1)=&HFF203C56
|
||||||
palarray(2)=&hff544e68
|
palarray(2)=&HFF544E68
|
||||||
palarray(3)=&hff8d697a
|
palarray(3)=&HFF8D697A
|
||||||
palarray(4)=&hffd08159
|
palarray(4)=&HFFD08159
|
||||||
palarray(5)=&hffffaa5e
|
palarray(5)=&HFFFFAA5E
|
||||||
palarray(6)=&hffffd4a3
|
palarray(6)=&HFFFFD4A3
|
||||||
palarray(7)=&hffffecd6
|
palarray(7)=&HFFFFECD6
|
||||||
case "endesga16"
|
case "endesga16"
|
||||||
redim palarray(15) as _unsigned long
|
redim palarray(15) as _unsigned long
|
||||||
palarray( 0)=&hffe4a672
|
palarray( 0)=&HFFE4A672
|
||||||
palarray( 1)=&hffb86f50
|
palarray( 1)=&HFFB86F50
|
||||||
palarray( 2)=&hff743f39
|
palarray( 2)=&HFF743F39
|
||||||
palarray( 3)=&hff3f2832
|
palarray( 3)=&HFF3F2832
|
||||||
palarray( 4)=&hff9e2835
|
palarray( 4)=&HFF9E2835
|
||||||
palarray( 5)=&hffe53b44
|
palarray( 5)=&HFFE53B44
|
||||||
palarray( 6)=&hfffb922b
|
palarray( 6)=&HFFFB922B
|
||||||
palarray( 7)=&hffffe762
|
palarray( 7)=&HFFFFE762
|
||||||
palarray( 8)=&hff63c64d
|
palarray( 8)=&HFF63C64D
|
||||||
palarray( 9)=&hff327345
|
palarray( 9)=&HFF327345
|
||||||
palarray(10)=&hff193d3f
|
palarray(10)=&HFF193D3F
|
||||||
palarray(11)=&hff4f6781
|
palarray(11)=&HFF4F6781
|
||||||
palarray(12)=&hffafbfd2
|
palarray(12)=&HFFAFBFD2
|
||||||
palarray(13)=&hffffffff
|
palarray(13)=&HFFFFFFFF
|
||||||
palarray(14)=&hff2ce8f4
|
palarray(14)=&HFF2CE8F4
|
||||||
palarray(15)=&hff0484d1
|
palarray(15)=&HFF0484D1
|
||||||
case "kinkan"
|
case "kinkan"
|
||||||
redim palarray(7) as _unsigned long
|
redim palarray(7) as _unsigned long
|
||||||
palarray(0)=&hff446176
|
palarray(0)=&HFF446176
|
||||||
palarray(1)=&hff3eaaae
|
palarray(1)=&HFF3EAAAE
|
||||||
palarray(2)=&hff8cefb6
|
palarray(2)=&HFF8CEFB6
|
||||||
palarray(3)=&hffc4f0c2
|
palarray(3)=&HFFC4F0C2
|
||||||
palarray(4)=&hfffffee4
|
palarray(4)=&HFFFFFEE4
|
||||||
palarray(5)=&hffbec0c0
|
palarray(5)=&HFFBEC0C0
|
||||||
palarray(6)=&hffffa7b9
|
palarray(6)=&HFFFFA7B9
|
||||||
palarray(7)=&hffff7a8f
|
palarray(7)=&HFFFF7A8F
|
||||||
case "custodian-8"
|
case "custodian-8"
|
||||||
redim palarray(7) as _unsigned long
|
redim palarray(7) as _unsigned long
|
||||||
palarray(0)=&hff2b3634
|
palarray(0)=&HFF2B3634
|
||||||
palarray(1)=&hff474848
|
palarray(1)=&HFF474848
|
||||||
palarray(2)=&hff6e5f52
|
palarray(2)=&HFF6E5F52
|
||||||
palarray(3)=&hffa2856c
|
palarray(3)=&HFFA2856C
|
||||||
palarray(4)=&hffa0a294
|
palarray(4)=&HFFA0A294
|
||||||
palarray(5)=&hffdcb9a0
|
palarray(5)=&HFFDCB9A0
|
||||||
palarray(6)=&hfff3dbc6
|
palarray(6)=&HFFF3DBC6
|
||||||
palarray(7)=&hfffffefe
|
palarray(7)=&HFFFFFEFE
|
||||||
case "greyteen"
|
case "greyteen"
|
||||||
redim palarray(17) as _unsigned long
|
redim palarray(17) as _unsigned long
|
||||||
palarray( 0)=&hff272524
|
palarray( 0)=&HFF272524
|
||||||
palarray( 1)=&hff444140
|
palarray( 1)=&HFF444140
|
||||||
palarray( 2)=&hf626368
|
palarray( 2)=&HF626368
|
||||||
palarray( 3)=&hff918783
|
palarray( 3)=&HFF918783
|
||||||
palarray( 4)=&hffa7a8b9
|
palarray( 4)=&HFFA7A8B9
|
||||||
palarray( 5)=&hffd7c7c0
|
palarray( 5)=&HFFD7C7C0
|
||||||
palarray( 6)=&hffdadceb
|
palarray( 6)=&HFFDADCEB
|
||||||
palarray( 7)=&hfff2ece9
|
palarray( 7)=&HFFF2ECE9
|
||||||
palarray( 8)=&hff4e393a
|
palarray( 8)=&HFF4E393A
|
||||||
palarray( 9)=&hff7d5c51
|
palarray( 9)=&HFF7D5C51
|
||||||
palarray(10)=&hffcd9f83
|
palarray(10)=&HFFCD9F83
|
||||||
palarray(11)=&hffebd8a3
|
palarray(11)=&HFFEBD8A3
|
||||||
palarray(12)=&hff95ae91
|
palarray(12)=&HFF95AE91
|
||||||
palarray(13)=&hff5a7054
|
palarray(13)=&HFF5A7054
|
||||||
palarray(14)=&hff3f4459
|
palarray(14)=&HFF3F4459
|
||||||
palarray(15)=&hff7b8caa
|
palarray(15)=&HFF7B8CAA
|
||||||
palarray(16)=&hffb0c6d5
|
palarray(16)=&HFFB0C6D5
|
||||||
palarray(17)=&hff745e72
|
palarray(17)=&HFF745E72
|
||||||
case "ega"
|
case "ega"
|
||||||
redim palarray(63) as _unsigned long
|
redim palarray(63) as _unsigned long
|
||||||
palarray( 0)=&hff000000
|
palarray( 0)=&HFF000000
|
||||||
palarray( 1)=&hff000055
|
palarray( 1)=&HFF000055
|
||||||
palarray( 2)=&hff0000aa
|
palarray( 2)=&HFF0000AA
|
||||||
palarray( 3)=&hff0000ff
|
palarray( 3)=&HFF0000FF
|
||||||
palarray( 4)=&hff550000
|
palarray( 4)=&HFF550000
|
||||||
palarray( 5)=&hff550055
|
palarray( 5)=&HFF550055
|
||||||
palarray( 6)=&hff5500aa
|
palarray( 6)=&HFF5500AA
|
||||||
palarray( 7)=&hff5500ff
|
palarray( 7)=&HFF5500FF
|
||||||
palarray( 8)=&hffaa0000
|
palarray( 8)=&HFFAA0000
|
||||||
palarray( 9)=&hffaa0055
|
palarray( 9)=&HFFAA0055
|
||||||
palarray(10)=&hffaa00aa
|
palarray(10)=&HFFAA00AA
|
||||||
palarray(11)=&hffaa00ff
|
palarray(11)=&HFFAA00FF
|
||||||
palarray(12)=&hffff0000
|
palarray(12)=&HFFFF0000
|
||||||
palarray(13)=&hffff0055
|
palarray(13)=&HFFFF0055
|
||||||
palarray(14)=&hffff00aa
|
palarray(14)=&HFFFF00AA
|
||||||
palarray(15)=&hffff00ff
|
palarray(15)=&HFFFF00FF
|
||||||
palarray(16)=&hff005500
|
palarray(16)=&HFF005500
|
||||||
palarray(17)=&hff005555
|
palarray(17)=&HFF005555
|
||||||
palarray(18)=&hff0055aa
|
palarray(18)=&HFF0055AA
|
||||||
palarray(19)=&hff0055ff
|
palarray(19)=&HFF0055FF
|
||||||
palarray(20)=&hff555500
|
palarray(20)=&HFF555500
|
||||||
palarray(21)=&hff555555
|
palarray(21)=&HFF555555
|
||||||
palarray(22)=&hff5555aa
|
palarray(22)=&HFF5555AA
|
||||||
palarray(23)=&hff5555ff
|
palarray(23)=&HFF5555FF
|
||||||
palarray(24)=&hffaa5500
|
palarray(24)=&HFFAA5500
|
||||||
palarray(25)=&hffaa5555
|
palarray(25)=&HFFAA5555
|
||||||
palarray(26)=&hffaa55aa
|
palarray(26)=&HFFAA55AA
|
||||||
palarray(27)=&hffaa55ff
|
palarray(27)=&HFFAA55FF
|
||||||
palarray(28)=&hffff5500
|
palarray(28)=&HFFFF5500
|
||||||
palarray(29)=&hffff5555
|
palarray(29)=&HFFFF5555
|
||||||
palarray(30)=&hffff55aa
|
palarray(30)=&HFFFF55AA
|
||||||
palarray(31)=&hffff55ff
|
palarray(31)=&HFFFF55FF
|
||||||
palarray(32)=&hff00aa00
|
palarray(32)=&HFF00AA00
|
||||||
palarray(33)=&hff00aa55
|
palarray(33)=&HFF00AA55
|
||||||
palarray(34)=&hff00aaaa
|
palarray(34)=&HFF00AAAA
|
||||||
palarray(35)=&hff00aaff
|
palarray(35)=&HFF00AAFF
|
||||||
palarray(36)=&hff55aa00
|
palarray(36)=&HFF55AA00
|
||||||
palarray(37)=&hff55aa55
|
palarray(37)=&HFF55AA55
|
||||||
palarray(38)=&hff55aaaa
|
palarray(38)=&HFF55AAAA
|
||||||
palarray(39)=&hff55aaff
|
palarray(39)=&HFF55AAFF
|
||||||
palarray(40)=&hffaaaa00
|
palarray(40)=&HFFAAAA00
|
||||||
palarray(41)=&hffaaaa55
|
palarray(41)=&HFFAAAA55
|
||||||
palarray(42)=&hffaaaaaa
|
palarray(42)=&HFFAAAAAA
|
||||||
palarray(43)=&hffaaaaff
|
palarray(43)=&HFFAAAAFF
|
||||||
palarray(44)=&hffffaa00
|
palarray(44)=&HFFFFAA00
|
||||||
palarray(45)=&hffffaa55
|
palarray(45)=&HFFFFAA55
|
||||||
palarray(46)=&hffffaaaa
|
palarray(46)=&HFFFFAAAA
|
||||||
palarray(47)=&hffffaaff
|
palarray(47)=&HFFFFAAFF
|
||||||
palarray(48)=&hff00ff00
|
palarray(48)=&HFF00FF00
|
||||||
palarray(49)=&hff00ff55
|
palarray(49)=&HFF00FF55
|
||||||
palarray(50)=&hff00ffaa
|
palarray(50)=&HFF00FFAA
|
||||||
palarray(51)=&hff00ffff
|
palarray(51)=&HFF00FFFF
|
||||||
palarray(52)=&hff55ff00
|
palarray(52)=&HFF55FF00
|
||||||
palarray(53)=&hff55ff55
|
palarray(53)=&HFF55FF55
|
||||||
palarray(54)=&hff55ffaa
|
palarray(54)=&HFF55FFAA
|
||||||
palarray(55)=&hff55ffff
|
palarray(55)=&HFF55FFFF
|
||||||
palarray(56)=&hffaaff00
|
palarray(56)=&HFFAAFF00
|
||||||
palarray(57)=&hffaaff55
|
palarray(57)=&HFFAAFF55
|
||||||
palarray(58)=&hffaaffaa
|
palarray(58)=&HFFAAFFAA
|
||||||
palarray(59)=&hffaaffff
|
palarray(59)=&HFFAAFFFF
|
||||||
palarray(60)=&hffffff00
|
palarray(60)=&HFFFFFF00
|
||||||
palarray(61)=&hffffff55
|
palarray(61)=&HFFFFFF55
|
||||||
palarray(62)=&hffffffaa
|
palarray(62)=&HFFFFFFAA
|
||||||
palarray(63)=&hffffffff
|
palarray(63)=&HFFFFFFFF
|
||||||
case else
|
case else
|
||||||
redim palarray(1) as _unsigned long
|
redim palarray(1) as _unsigned long
|
||||||
if _fileexists(palname) then
|
if _fileexists(palname) then
|
||||||
|
|
@ -153,8 +152,8 @@ sub loadpalette(palname as string,palarray() as _unsigned long)
|
||||||
loop
|
loop
|
||||||
close fh
|
close fh
|
||||||
else
|
else
|
||||||
palarray(0)=&hff000000
|
palarray(0)=&HFF000000
|
||||||
palarray(1)=&hffffffff
|
palarray(1)=&HFFFFFFFF
|
||||||
end if
|
end if
|
||||||
end select
|
end select
|
||||||
end sub
|
end sub
|
||||||
|
|
|
||||||
|
|
@ -222,6 +222,78 @@ sub floodfill (startx,starty,fillcolor~&)
|
||||||
wend
|
wend
|
||||||
end sub
|
end sub
|
||||||
|
|
||||||
|
sub boundaryfill (startx,starty,fillcolor~&,boundarycolor~&)
|
||||||
|
' Boundary check safety gates
|
||||||
|
if startx < 0 or startx >= _width or starty < 0 or starty >= _height then exit sub
|
||||||
|
|
||||||
|
' If the starting pixel is already the boundary or the fill color, exit immediately
|
||||||
|
dim currentcolor~&
|
||||||
|
currentcolor~& = point(startx,starty)
|
||||||
|
if currentcolor~& = boundarycolor~& or currentcolor~& = fillcolor~& then exit sub
|
||||||
|
|
||||||
|
dim stackx(2000) as integer
|
||||||
|
dim stacky(2000) as integer
|
||||||
|
stackptr=1
|
||||||
|
|
||||||
|
stackx(stackptr)=startx
|
||||||
|
stacky(stackptr)=starty
|
||||||
|
|
||||||
|
while stackptr>0
|
||||||
|
curx=stackx(stackptr)
|
||||||
|
cury=stacky(stackptr)
|
||||||
|
stackptr=stackptr-1
|
||||||
|
|
||||||
|
' Move to the left edge of the region until we hit a boundary or fillcolor
|
||||||
|
x=curx
|
||||||
|
while x>=0
|
||||||
|
currentcolor~& = point(x,cury)
|
||||||
|
if currentcolor~& = boundarycolor~& or currentcolor~& = fillcolor~& then exit while
|
||||||
|
x=x-1
|
||||||
|
wend
|
||||||
|
x=x+1
|
||||||
|
|
||||||
|
spanabove=0
|
||||||
|
spanbelow=0
|
||||||
|
|
||||||
|
' Process the span moving right
|
||||||
|
while x<_width
|
||||||
|
currentcolor~& = point(x,cury)
|
||||||
|
if currentcolor~& = boundarycolor~& or currentcolor~& = fillcolor~& then exit while
|
||||||
|
|
||||||
|
pset (x,cury),fillcolor~&
|
||||||
|
|
||||||
|
' Check row above
|
||||||
|
if cury>0 then
|
||||||
|
dim colorabove~&
|
||||||
|
colorabove~& = point(x,cury-1)
|
||||||
|
if spanabove=0 and colorabove~& <> boundarycolor~& and colorabove~& <> fillcolor~& then
|
||||||
|
stackptr=stackptr+1
|
||||||
|
stackx(stackptr)=x
|
||||||
|
stacky(stackptr)=cury-1
|
||||||
|
spanabove=1
|
||||||
|
elseif spanabove=1 and (colorabove~& = boundarycolor~& or colorabove~& = fillcolor~&) then
|
||||||
|
spanabove=0
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
' Check row below
|
||||||
|
if cury<_height-1 then
|
||||||
|
dim colorbelow~&
|
||||||
|
colorbelow~& = point(x,cury+1)
|
||||||
|
if spanbelow=0 and colorbelow~& <> boundarycolor~& and colorbelow~& <> fillcolor~& then
|
||||||
|
stackptr=stackptr+1
|
||||||
|
stackx(stackptr)=x
|
||||||
|
stacky(stackptr)=cury+1
|
||||||
|
spanbelow=1
|
||||||
|
elseif spanbelow=1 and (colorbelow~& = boundarycolor~& or colorbelow~& = fillcolor~&) then
|
||||||
|
spanbelow=0
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
x=x+1
|
||||||
|
wend
|
||||||
|
wend
|
||||||
|
end sub
|
||||||
|
|
||||||
sub ditheredgradient (x1 as long,y1 as long,x2 as long,y2 as long,fcol as _unsigned long,bcol as _unsigned long)
|
sub ditheredgradient (x1 as long,y1 as long,x2 as long,y2 as long,fcol as _unsigned long,bcol as _unsigned long)
|
||||||
' 1. Get canvas boundaries from the active drawing layer
|
' 1. Get canvas boundaries from the active drawing layer
|
||||||
dim canvasw as integer:canvasw=_width(layers(1).ihandle)
|
dim canvasw as integer:canvasw=_width(layers(1).ihandle)
|
||||||
|
|
|
||||||
21
pixler.bas
21
pixler.bas
|
|
@ -35,8 +35,8 @@ screen _newimage(750,480,32)
|
||||||
_delay 0.1
|
_delay 0.1
|
||||||
temp&=_resize
|
temp&=_resize
|
||||||
redim shared pal(0) as _unsigned long
|
redim shared pal(0) as _unsigned long
|
||||||
dim as integer ch1,ch2,ch3,bt
|
|
||||||
loadpalette"slso8",pal()
|
loadpalette"custodian-8",pal()
|
||||||
layers(0).ihandle=_newimage(320,320,32)
|
layers(0).ihandle=_newimage(320,320,32)
|
||||||
layers(1).ihandle=_newimage(320,320,32)
|
layers(1).ihandle=_newimage(320,320,32)
|
||||||
layers(2).ihandle=_newimage(320,320,32)
|
layers(2).ihandle=_newimage(320,320,32)
|
||||||
|
|
@ -238,6 +238,8 @@ sub redraw
|
||||||
filledpolygon numarr(),state.fcolor
|
filledpolygon numarr(),state.fcolor
|
||||||
case "floodfill"
|
case "floodfill"
|
||||||
floodfill numarr(0),numarr(1),numarr(2)
|
floodfill numarr(0),numarr(1),numarr(2)
|
||||||
|
case "boundaryfill"
|
||||||
|
boundaryfill numarr(0),numarr(1),numarr(2),numarr(3)
|
||||||
case "gradient"
|
case "gradient"
|
||||||
ditheredgradient numarr(0),numarr(1),numarr(2),numarr(3),state.fcolor,state.bcolor
|
ditheredgradient numarr(0),numarr(1),numarr(2),numarr(3),state.fcolor,state.bcolor
|
||||||
case ""
|
case ""
|
||||||
|
|
@ -426,17 +428,12 @@ sub canvas
|
||||||
end if
|
end if
|
||||||
end if
|
end if
|
||||||
|
|
||||||
dim r as integer
|
|
||||||
|
|
||||||
' 3. Calculate Canvas Coordinates
|
' 3. Calculate Canvas Coordinates
|
||||||
dim canx as long
|
dim canx as long
|
||||||
dim cany as long
|
dim cany as long
|
||||||
canx=int((_mousex-state.offsetx)/state.zoom)
|
canx=int((_mousex-state.offsetx)/state.zoom)
|
||||||
cany=int((_mousey-state.offsety)/state.zoom)
|
cany=int((_mousey-state.offsety)/state.zoom)
|
||||||
|
|
||||||
static polypoints(200) as single
|
|
||||||
static pointcount as integer
|
|
||||||
|
|
||||||
static drawcol
|
static drawcol
|
||||||
if _mousebutton(1) then drawcol=state.fcolor
|
if _mousebutton(1) then drawcol=state.fcolor
|
||||||
if _mousebutton(2) then drawcol=state.bcolor
|
if _mousebutton(2) then drawcol=state.bcolor
|
||||||
|
|
@ -704,8 +701,18 @@ sub do.floodfill(x as long,y as long,col as long)
|
||||||
if mouseclicked or rmouseclicked then
|
if mouseclicked or rmouseclicked then
|
||||||
_source layers(1).ihandle
|
_source layers(1).ihandle
|
||||||
_dest layers(1).ihandle
|
_dest layers(1).ihandle
|
||||||
|
|
||||||
|
' Check if either Left Shift (100303) or Right Shift (100304) is held down
|
||||||
|
if _keydown(100303) or _keydown(100304) then
|
||||||
|
' Fill until it hits the background color as a border
|
||||||
|
boundaryfill x,y,col,state.bcolor
|
||||||
|
addcommand"boundaryfill ("+tst(x)+","+tst(y)+","+hex$(col)+","+hex$(state.bcolor)+")"
|
||||||
|
else
|
||||||
|
' Standard color-replace flood fill
|
||||||
floodfill x,y,col
|
floodfill x,y,col
|
||||||
addcommand"floodfill ("+tst(x)+","+tst(y)+","+hex$(col)+")"
|
addcommand"floodfill ("+tst(x)+","+tst(y)+","+hex$(col)+")"
|
||||||
|
end if
|
||||||
|
|
||||||
state.isdrawing=0
|
state.isdrawing=0
|
||||||
_source osource
|
_source osource
|
||||||
_dest odest
|
_dest odest
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue