@@ -96,55 +96,44 @@ class VectorFloodFiller(image: Bitmap) {
9696 var lFillLoc = x // the location to check/fill on the left
9797 var pxIdx = width * y + x
9898 path.moveTo(x.toFloat(), y.toFloat())
99-
10099 while (true ) {
101- // fill with the color
102- val newX = (pxIdx % width).toFloat()
103- val newY = (pxIdx - newX) / width
104- path.lineTo(newX, newY)
105-
106- // indicate that this pixel has already been checked and filled
107100 pixelsChecked[pxIdx] = true
108-
109- // de-increment
110- lFillLoc-- // de-increment counter
111- pxIdx-- // de-increment pixel index
112-
101+ lFillLoc--
102+ pxIdx--
113103 // exit loop if we're at edge of bitmap or color area
114104 if (lFillLoc < 0 || pixelsChecked[pxIdx] || ! isPixelColorWithinTolerance(pxIdx)) {
115105 break
116106 }
117107 }
108+ vectorFill(pxIdx + 1 )
118109 lFillLoc++
119110
120111 // Find Right Edge of Color Area
121112 var rFillLoc = x // the location to check/fill on the left
122113 pxIdx = width * y + x
123114 while (true ) {
124- // fill with the color
125- val newX = (pxIdx % width).toFloat()
126- val newY = (pxIdx - newX) / width
127- path.lineTo(newX, newY)
128-
129- // indicate that this pixel has already been checked and filled
130115 pixelsChecked[pxIdx] = true
131-
132- // increment
133- rFillLoc++ // increment counter
134- pxIdx++ // increment pixel index
135-
136- // exit loop if we're at edge of bitmap or color area
116+ rFillLoc++
117+ pxIdx++
137118 if (rFillLoc >= width || pixelsChecked[pxIdx] || ! isPixelColorWithinTolerance(pxIdx)) {
138119 break
139120 }
140121 }
122+ vectorFill(pxIdx - 1 )
141123 rFillLoc--
142124
143125 // add range to queue
144126 val r = FloodFillRange (lFillLoc, rFillLoc, y)
145127 ranges.offer(r)
146128 }
147129
130+ // vector fill pixels with color
131+ private fun vectorFill (pxIndex : Int ) {
132+ val x = (pxIndex % width).toFloat()
133+ val y = (pxIndex - x) / width
134+ path.lineTo(x, y)
135+ }
136+
148137 // Sees if a pixel is within the color tolerance range.
149138 private fun isPixelColorWithinTolerance (px : Int ): Boolean {
150139 val red = pixels!! [px] ushr 16 and 0xff
0 commit comments