Made the function "clipLine" to work with int64 values instead of int --- otherwise...
authorLeonid Beynenson <no@email>
Tue, 20 Mar 2012 11:40:05 +0000 (11:40 +0000)
committerLeonid Beynenson <no@email>
Tue, 20 Mar 2012 11:40:05 +0000 (11:40 +0000)
modules/core/src/drawing.cpp

index ce8e450..b8eb1dd 100644 (file)
@@ -77,9 +77,9 @@ FillConvexPoly( Mat& img, const Point* v, int npts,
 
 bool clipLine( Size img_size, Point& pt1, Point& pt2 )
 {
-    int x1, y1, x2, y2;
+    int64 x1, y1, x2, y2;
     int c1, c2;
-    int right = img_size.width-1, bottom = img_size.height-1;
+    int64 right = img_size.width-1, bottom = img_size.height-1;
 
     if( img_size.width <= 0 || img_size.height <= 0 )
         return false;
@@ -90,18 +90,18 @@ bool clipLine( Size img_size, Point& pt1, Point& pt2 )
 
     if( (c1 & c2) == 0 && (c1 | c2) != 0 )
     {
-        int a;
+        int64 a;
         if( c1 & 12 )
         {
             a = c1 < 8 ? 0 : bottom;
-            x1 += (int) (((int64) (a - y1)) * (x2 - x1) / (y2 - y1));
+            x1 += (int64) (((int64) (a - y1)) * (x2 - x1) / (y2 - y1));
             y1 = a;
             c1 = (x1 < 0) + (x1 > right) * 2;
         }
         if( c2 & 12 )
         {
             a = c2 < 8 ? 0 : bottom;
-            x2 += (int) (((int64) (a - y2)) * (x2 - x1) / (y2 - y1));
+            x2 += (int64) (((int64) (a - y2)) * (x2 - x1) / (y2 - y1));
             y2 = a;
             c2 = (x2 < 0) + (x2 > right) * 2;
         }
@@ -110,14 +110,14 @@ bool clipLine( Size img_size, Point& pt1, Point& pt2 )
             if( c1 )
             {
                 a = c1 == 1 ? 0 : right;
-                y1 += (int) (((int64) (a - x1)) * (y2 - y1) / (x2 - x1));
+                y1 += (int64) (((int64) (a - x1)) * (y2 - y1) / (x2 - x1));
                 x1 = a;
                 c1 = 0;
             }
             if( c2 )
             {
                 a = c2 == 1 ? 0 : right;
-                y2 += (int) (((int64) (a - x2)) * (y2 - y1) / (x2 - x1));
+                y2 += (int64) (((int64) (a - x2)) * (y2 - y1) / (x2 - x1));
                 x2 = a;
                 c2 = 0;
             }
@@ -125,10 +125,10 @@ bool clipLine( Size img_size, Point& pt1, Point& pt2 )
 
         assert( (c1 & c2) != 0 || (x1 | y1 | x2 | y2) >= 0 );
 
-        pt1.x = x1;
-        pt1.y = y1;
-        pt2.x = x2;
-        pt2.y = y2;
+        pt1.x = (int)x1;
+        pt1.y = (int)y1;
+        pt2.x = (int)x2;
+        pt2.y = (int)y2;
     }
 
     return (c1 | c2) == 0;