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)
|
||||
dim slso8(7) as _unsigned long
|
||||
select case lcase$(palname)
|
||||
case "slso8"
|
||||
redim palarray(7) as _unsigned long
|
||||
palarray(0)=&hff0d2b45
|
||||
palarray(1)=&hff203c56
|
||||
palarray(2)=&hff544e68
|
||||
palarray(3)=&hff8d697a
|
||||
palarray(4)=&hffd08159
|
||||
palarray(5)=&hffffaa5e
|
||||
palarray(6)=&hffffd4a3
|
||||
palarray(7)=&hffffecd6
|
||||
palarray(0)=&HFF0D2B45
|
||||
palarray(1)=&HFF203C56
|
||||
palarray(2)=&HFF544E68
|
||||
palarray(3)=&HFF8D697A
|
||||
palarray(4)=&HFFD08159
|
||||
palarray(5)=&HFFFFAA5E
|
||||
palarray(6)=&HFFFFD4A3
|
||||
palarray(7)=&HFFFFECD6
|
||||
case "endesga16"
|
||||
redim palarray(15) as _unsigned long
|
||||
palarray( 0)=&hffe4a672
|
||||
palarray( 1)=&hffb86f50
|
||||
palarray( 2)=&hff743f39
|
||||
palarray( 3)=&hff3f2832
|
||||
palarray( 4)=&hff9e2835
|
||||
palarray( 5)=&hffe53b44
|
||||
palarray( 6)=&hfffb922b
|
||||
palarray( 7)=&hffffe762
|
||||
palarray( 8)=&hff63c64d
|
||||
palarray( 9)=&hff327345
|
||||
palarray(10)=&hff193d3f
|
||||
palarray(11)=&hff4f6781
|
||||
palarray(12)=&hffafbfd2
|
||||
palarray(13)=&hffffffff
|
||||
palarray(14)=&hff2ce8f4
|
||||
palarray(15)=&hff0484d1
|
||||
palarray( 0)=&HFFE4A672
|
||||
palarray( 1)=&HFFB86F50
|
||||
palarray( 2)=&HFF743F39
|
||||
palarray( 3)=&HFF3F2832
|
||||
palarray( 4)=&HFF9E2835
|
||||
palarray( 5)=&HFFE53B44
|
||||
palarray( 6)=&HFFFB922B
|
||||
palarray( 7)=&HFFFFE762
|
||||
palarray( 8)=&HFF63C64D
|
||||
palarray( 9)=&HFF327345
|
||||
palarray(10)=&HFF193D3F
|
||||
palarray(11)=&HFF4F6781
|
||||
palarray(12)=&HFFAFBFD2
|
||||
palarray(13)=&HFFFFFFFF
|
||||
palarray(14)=&HFF2CE8F4
|
||||
palarray(15)=&HFF0484D1
|
||||
case "kinkan"
|
||||
redim palarray(7) as _unsigned long
|
||||
palarray(0)=&hff446176
|
||||
palarray(1)=&hff3eaaae
|
||||
palarray(2)=&hff8cefb6
|
||||
palarray(3)=&hffc4f0c2
|
||||
palarray(4)=&hfffffee4
|
||||
palarray(5)=&hffbec0c0
|
||||
palarray(6)=&hffffa7b9
|
||||
palarray(7)=&hffff7a8f
|
||||
palarray(0)=&HFF446176
|
||||
palarray(1)=&HFF3EAAAE
|
||||
palarray(2)=&HFF8CEFB6
|
||||
palarray(3)=&HFFC4F0C2
|
||||
palarray(4)=&HFFFFFEE4
|
||||
palarray(5)=&HFFBEC0C0
|
||||
palarray(6)=&HFFFFA7B9
|
||||
palarray(7)=&HFFFF7A8F
|
||||
case "custodian-8"
|
||||
redim palarray(7) as _unsigned long
|
||||
palarray(0)=&hff2b3634
|
||||
palarray(1)=&hff474848
|
||||
palarray(2)=&hff6e5f52
|
||||
palarray(3)=&hffa2856c
|
||||
palarray(4)=&hffa0a294
|
||||
palarray(5)=&hffdcb9a0
|
||||
palarray(6)=&hfff3dbc6
|
||||
palarray(7)=&hfffffefe
|
||||
palarray(0)=&HFF2B3634
|
||||
palarray(1)=&HFF474848
|
||||
palarray(2)=&HFF6E5F52
|
||||
palarray(3)=&HFFA2856C
|
||||
palarray(4)=&HFFA0A294
|
||||
palarray(5)=&HFFDCB9A0
|
||||
palarray(6)=&HFFF3DBC6
|
||||
palarray(7)=&HFFFFFEFE
|
||||
case "greyteen"
|
||||
redim palarray(17) as _unsigned long
|
||||
palarray( 0)=&hff272524
|
||||
palarray( 1)=&hff444140
|
||||
palarray( 2)=&hf626368
|
||||
palarray( 3)=&hff918783
|
||||
palarray( 4)=&hffa7a8b9
|
||||
palarray( 5)=&hffd7c7c0
|
||||
palarray( 6)=&hffdadceb
|
||||
palarray( 7)=&hfff2ece9
|
||||
palarray( 8)=&hff4e393a
|
||||
palarray( 9)=&hff7d5c51
|
||||
palarray(10)=&hffcd9f83
|
||||
palarray(11)=&hffebd8a3
|
||||
palarray(12)=&hff95ae91
|
||||
palarray(13)=&hff5a7054
|
||||
palarray(14)=&hff3f4459
|
||||
palarray(15)=&hff7b8caa
|
||||
palarray(16)=&hffb0c6d5
|
||||
palarray(17)=&hff745e72
|
||||
palarray( 0)=&HFF272524
|
||||
palarray( 1)=&HFF444140
|
||||
palarray( 2)=&HF626368
|
||||
palarray( 3)=&HFF918783
|
||||
palarray( 4)=&HFFA7A8B9
|
||||
palarray( 5)=&HFFD7C7C0
|
||||
palarray( 6)=&HFFDADCEB
|
||||
palarray( 7)=&HFFF2ECE9
|
||||
palarray( 8)=&HFF4E393A
|
||||
palarray( 9)=&HFF7D5C51
|
||||
palarray(10)=&HFFCD9F83
|
||||
palarray(11)=&HFFEBD8A3
|
||||
palarray(12)=&HFF95AE91
|
||||
palarray(13)=&HFF5A7054
|
||||
palarray(14)=&HFF3F4459
|
||||
palarray(15)=&HFF7B8CAA
|
||||
palarray(16)=&HFFB0C6D5
|
||||
palarray(17)=&HFF745E72
|
||||
case "ega"
|
||||
redim palarray(63) as _unsigned long
|
||||
palarray( 0)=&hff000000
|
||||
palarray( 1)=&hff000055
|
||||
palarray( 2)=&hff0000aa
|
||||
palarray( 3)=&hff0000ff
|
||||
palarray( 4)=&hff550000
|
||||
palarray( 5)=&hff550055
|
||||
palarray( 6)=&hff5500aa
|
||||
palarray( 7)=&hff5500ff
|
||||
palarray( 8)=&hffaa0000
|
||||
palarray( 9)=&hffaa0055
|
||||
palarray(10)=&hffaa00aa
|
||||
palarray(11)=&hffaa00ff
|
||||
palarray(12)=&hffff0000
|
||||
palarray(13)=&hffff0055
|
||||
palarray(14)=&hffff00aa
|
||||
palarray(15)=&hffff00ff
|
||||
palarray(16)=&hff005500
|
||||
palarray(17)=&hff005555
|
||||
palarray(18)=&hff0055aa
|
||||
palarray(19)=&hff0055ff
|
||||
palarray(20)=&hff555500
|
||||
palarray(21)=&hff555555
|
||||
palarray(22)=&hff5555aa
|
||||
palarray(23)=&hff5555ff
|
||||
palarray(24)=&hffaa5500
|
||||
palarray(25)=&hffaa5555
|
||||
palarray(26)=&hffaa55aa
|
||||
palarray(27)=&hffaa55ff
|
||||
palarray(28)=&hffff5500
|
||||
palarray(29)=&hffff5555
|
||||
palarray(30)=&hffff55aa
|
||||
palarray(31)=&hffff55ff
|
||||
palarray(32)=&hff00aa00
|
||||
palarray(33)=&hff00aa55
|
||||
palarray(34)=&hff00aaaa
|
||||
palarray(35)=&hff00aaff
|
||||
palarray(36)=&hff55aa00
|
||||
palarray(37)=&hff55aa55
|
||||
palarray(38)=&hff55aaaa
|
||||
palarray(39)=&hff55aaff
|
||||
palarray(40)=&hffaaaa00
|
||||
palarray(41)=&hffaaaa55
|
||||
palarray(42)=&hffaaaaaa
|
||||
palarray(43)=&hffaaaaff
|
||||
palarray(44)=&hffffaa00
|
||||
palarray(45)=&hffffaa55
|
||||
palarray(46)=&hffffaaaa
|
||||
palarray(47)=&hffffaaff
|
||||
palarray(48)=&hff00ff00
|
||||
palarray(49)=&hff00ff55
|
||||
palarray(50)=&hff00ffaa
|
||||
palarray(51)=&hff00ffff
|
||||
palarray(52)=&hff55ff00
|
||||
palarray(53)=&hff55ff55
|
||||
palarray(54)=&hff55ffaa
|
||||
palarray(55)=&hff55ffff
|
||||
palarray(56)=&hffaaff00
|
||||
palarray(57)=&hffaaff55
|
||||
palarray(58)=&hffaaffaa
|
||||
palarray(59)=&hffaaffff
|
||||
palarray(60)=&hffffff00
|
||||
palarray(61)=&hffffff55
|
||||
palarray(62)=&hffffffaa
|
||||
palarray(63)=&hffffffff
|
||||
palarray( 0)=&HFF000000
|
||||
palarray( 1)=&HFF000055
|
||||
palarray( 2)=&HFF0000AA
|
||||
palarray( 3)=&HFF0000FF
|
||||
palarray( 4)=&HFF550000
|
||||
palarray( 5)=&HFF550055
|
||||
palarray( 6)=&HFF5500AA
|
||||
palarray( 7)=&HFF5500FF
|
||||
palarray( 8)=&HFFAA0000
|
||||
palarray( 9)=&HFFAA0055
|
||||
palarray(10)=&HFFAA00AA
|
||||
palarray(11)=&HFFAA00FF
|
||||
palarray(12)=&HFFFF0000
|
||||
palarray(13)=&HFFFF0055
|
||||
palarray(14)=&HFFFF00AA
|
||||
palarray(15)=&HFFFF00FF
|
||||
palarray(16)=&HFF005500
|
||||
palarray(17)=&HFF005555
|
||||
palarray(18)=&HFF0055AA
|
||||
palarray(19)=&HFF0055FF
|
||||
palarray(20)=&HFF555500
|
||||
palarray(21)=&HFF555555
|
||||
palarray(22)=&HFF5555AA
|
||||
palarray(23)=&HFF5555FF
|
||||
palarray(24)=&HFFAA5500
|
||||
palarray(25)=&HFFAA5555
|
||||
palarray(26)=&HFFAA55AA
|
||||
palarray(27)=&HFFAA55FF
|
||||
palarray(28)=&HFFFF5500
|
||||
palarray(29)=&HFFFF5555
|
||||
palarray(30)=&HFFFF55AA
|
||||
palarray(31)=&HFFFF55FF
|
||||
palarray(32)=&HFF00AA00
|
||||
palarray(33)=&HFF00AA55
|
||||
palarray(34)=&HFF00AAAA
|
||||
palarray(35)=&HFF00AAFF
|
||||
palarray(36)=&HFF55AA00
|
||||
palarray(37)=&HFF55AA55
|
||||
palarray(38)=&HFF55AAAA
|
||||
palarray(39)=&HFF55AAFF
|
||||
palarray(40)=&HFFAAAA00
|
||||
palarray(41)=&HFFAAAA55
|
||||
palarray(42)=&HFFAAAAAA
|
||||
palarray(43)=&HFFAAAAFF
|
||||
palarray(44)=&HFFFFAA00
|
||||
palarray(45)=&HFFFFAA55
|
||||
palarray(46)=&HFFFFAAAA
|
||||
palarray(47)=&HFFFFAAFF
|
||||
palarray(48)=&HFF00FF00
|
||||
palarray(49)=&HFF00FF55
|
||||
palarray(50)=&HFF00FFAA
|
||||
palarray(51)=&HFF00FFFF
|
||||
palarray(52)=&HFF55FF00
|
||||
palarray(53)=&HFF55FF55
|
||||
palarray(54)=&HFF55FFAA
|
||||
palarray(55)=&HFF55FFFF
|
||||
palarray(56)=&HFFAAFF00
|
||||
palarray(57)=&HFFAAFF55
|
||||
palarray(58)=&HFFAAFFAA
|
||||
palarray(59)=&HFFAAFFFF
|
||||
palarray(60)=&HFFFFFF00
|
||||
palarray(61)=&HFFFFFF55
|
||||
palarray(62)=&HFFFFFFAA
|
||||
palarray(63)=&HFFFFFFFF
|
||||
case else
|
||||
redim palarray(1) as _unsigned long
|
||||
if _fileexists(palname) then
|
||||
|
|
@ -153,8 +152,8 @@ sub loadpalette(palname as string,palarray() as _unsigned long)
|
|||
loop
|
||||
close fh
|
||||
else
|
||||
palarray(0)=&hff000000
|
||||
palarray(1)=&hffffffff
|
||||
palarray(0)=&HFF000000
|
||||
palarray(1)=&HFFFFFFFF
|
||||
end if
|
||||
end select
|
||||
end sub
|
||||
|
|
|
|||
|
|
@ -222,6 +222,78 @@ sub floodfill (startx,starty,fillcolor~&)
|
|||
wend
|
||||
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)
|
||||
' 1. Get canvas boundaries from the active drawing layer
|
||||
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
|
||||
temp&=_resize
|
||||
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(1).ihandle=_newimage(320,320,32)
|
||||
layers(2).ihandle=_newimage(320,320,32)
|
||||
|
|
@ -238,6 +238,8 @@ sub redraw
|
|||
filledpolygon numarr(),state.fcolor
|
||||
case "floodfill"
|
||||
floodfill numarr(0),numarr(1),numarr(2)
|
||||
case "boundaryfill"
|
||||
boundaryfill numarr(0),numarr(1),numarr(2),numarr(3)
|
||||
case "gradient"
|
||||
ditheredgradient numarr(0),numarr(1),numarr(2),numarr(3),state.fcolor,state.bcolor
|
||||
case ""
|
||||
|
|
@ -426,17 +428,12 @@ sub canvas
|
|||
end if
|
||||
end if
|
||||
|
||||
dim r as integer
|
||||
|
||||
' 3. Calculate Canvas Coordinates
|
||||
dim canx as long
|
||||
dim cany as long
|
||||
canx=int((_mousex-state.offsetx)/state.zoom)
|
||||
cany=int((_mousey-state.offsety)/state.zoom)
|
||||
|
||||
static polypoints(200) as single
|
||||
static pointcount as integer
|
||||
|
||||
static drawcol
|
||||
if _mousebutton(1) then drawcol=state.fcolor
|
||||
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
|
||||
_source 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
|
||||
addcommand"floodfill ("+tst(x)+","+tst(y)+","+hex$(col)+")"
|
||||
end if
|
||||
|
||||
state.isdrawing=0
|
||||
_source osource
|
||||
_dest odest
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue