#2258 fix
authorEvgeny Talanin <evgeny.talanin@itseez.com>
Tue, 9 Oct 2012 10:52:47 +0000 (14:52 +0400)
committerEvgeny Talanin <evgeny.talanin@itseez.com>
Tue, 9 Oct 2012 10:52:47 +0000 (14:52 +0400)
modules/imgproc/src/floodfill.cpp

index e970a31..8f59f5f 100644 (file)
@@ -489,39 +489,37 @@ cvFloodFill( CvArr* arr, CvPoint seed_point,
 
     if( is_simple )
     {
-        /*int elem_size = CV_ELEM_SIZE(type);
+        int elem_size = CV_ELEM_SIZE(type);
         const uchar* seed_ptr = img->data.ptr + img->step*seed_point.y + elem_size*seed_point.x;
 
-        // check if the new value is different from the current value at the seed point.
-        // if they are exactly the same, use the generic version with mask to avoid infinite loops.
-        for( i = 0; i < elem_size; i++ )
-            if( seed_ptr[i] != ((uchar*)nv_buf)[i] )
+        for(i = 0; i < elem_size; i++)
+            if (seed_ptr[i] != nv_buf.b[i])
                 break;
 
-        if( i == elem_size )
-            return;*/
-
-        if( type == CV_8UC1 )
-            icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, nv_buf.b[0],
-                              comp, flags, buffer, buffer_size);
-        else if( type == CV_8UC3 )
-            icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, cv::Vec3b(nv_buf.b),
-                              comp, flags, buffer, buffer_size);
-        else if( type == CV_32SC1 )
-            icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, nv_buf.i[0],
-                              comp, flags, buffer, buffer_size);
-        else if( type == CV_32FC1 )
-            icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, nv_buf.f[0],
-                              comp, flags, buffer, buffer_size);
-        else if( type == CV_32SC3 )
-            icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, cv::Vec3i(nv_buf.i),
-                              comp, flags, buffer, buffer_size);
-        else if( type == CV_32FC3 )
-            icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, cv::Vec3f(nv_buf.f),
-                              comp, flags, buffer, buffer_size);
-        else
-            CV_Error( CV_StsUnsupportedFormat, "" );
-        return;
+        if (i != elem_size)
+        {
+            if( type == CV_8UC1 )
+                icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, nv_buf.b[0],
+                                  comp, flags, buffer, buffer_size);
+            else if( type == CV_8UC3 )
+                icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, cv::Vec3b(nv_buf.b),
+                                  comp, flags, buffer, buffer_size);
+            else if( type == CV_32SC1 )
+                icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, nv_buf.i[0],
+                                  comp, flags, buffer, buffer_size);
+            else if( type == CV_32FC1 )
+                icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, nv_buf.f[0],
+                                  comp, flags, buffer, buffer_size);
+            else if( type == CV_32SC3 )
+                icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, cv::Vec3i(nv_buf.i),
+                                  comp, flags, buffer, buffer_size);
+            else if( type == CV_32FC3 )
+                icvFloodFill_CnIR(img->data.ptr, img->step, size, seed_point, cv::Vec3f(nv_buf.f),
+                                  comp, flags, buffer, buffer_size);
+            else
+                CV_Error( CV_StsUnsupportedFormat, "" );
+            return;
+        }
     }
 
     if( !mask )