@@ -6702,11 +6702,11 @@ namespace cimg_library {
67026702 // (so, this is **not** a classical rounding behavior!).
67036703 // This function is used by drawing methods, to get coherent rounded primitive coordinates.
67046704 // Beware, 'b' must be strictly positive!
6705- template<typename T>
6706- T inline round_div(const T a, const T b, const T hb) {
6707- return b==1?a:a>=0?(a + hb)/b:-(hb - 1 - a)/b;
6705+ template<typename T, typename t >
6706+ t inline round_div(const T a, const t b, const t hb) {
6707+ return (t)( b==1?a:a>=0?(a + hb)/b:-(hb - 1 - a)/b) ;
67086708 }
6709- #define cimg_rd(a,b) cimg::round_div(a,b, h##b )
6709+ #define cimg_rd(a,b,c ) cimg::round_div((cimg_long)a*b,c, h##c )
67106710
67116711 //! Return rounded value.
67126712 /**
@@ -49776,7 +49776,7 @@ namespace cimg_library {
4977649776 for (int y = y0_cut; y!=y1_cut; y+=step) {
4977749777 const int
4977849778 t = cimg::abs(y - y0),
49779- x = x0 + cimg_rd(t* x01,dy);
49779+ x = x0 + cimg_rd(t, x01,dy);
4978049780 if (x>=0 && x<=w1 && pattern&hatch) {
4978149781 T *const ptrd = is_horizontal?data(y,x):data(x,y);
4978249782 cimg_forC(*this,c) {
@@ -50503,8 +50503,8 @@ namespace cimg_library {
5050350503 for (int y = cy0; y<=cy2; ++y) {
5050450504 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5050550505 longT
50506- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
50507- xM = x0 + cimg_rd(dx02* yy0,dy02);
50506+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
50507+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5050850508 if (xm>xM) cimg::swap(xm,xM);
5050950509 cimg_draw_scanline(xm,xM,y,color,opacity,cbs);
5051050510 }
@@ -50620,8 +50620,8 @@ namespace cimg_library {
5062050620 for (int y = cy0; y<=cy2; ++y) {
5062150621 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5062250622 longT
50623- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
50624- xM = x0 + cimg_rd(dx02* yy0,dy02);
50623+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
50624+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5062550625 float
5062650626 izm = y<y1?(iz0 + diz01*yy0/dy01):(iz1 + diz12*yy1/dy12),
5062750627 izM = iz0 + diz02*yy0/dy02;
@@ -50700,8 +50700,8 @@ namespace cimg_library {
5070050700 for (int y = cy0; y<=cy2; ++y) {
5070150701 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5070250702 longT
50703- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
50704- xM = x0 + cimg_rd(dx02* yy0,dy02);
50703+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
50704+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5070550705 float
5070650706 bsm = y<y1?(bs0 + dbs01*yy0/dy01):(bs1 + dbs12*yy1/dy12),
5070750707 bsM = bs0 + dbs02*yy0/dy02;
@@ -50773,8 +50773,8 @@ namespace cimg_library {
5077350773 for (int y = cy0; y<=cy2; ++y) {
5077450774 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5077550775 longT
50776- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
50777- xM = x0 + cimg_rd(dx02* yy0,dy02);
50776+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
50777+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5077850778 float
5077950779 izm = y<y1?(iz0 + diz01*yy0/dy01):(iz1 + diz12*yy1/dy12),
5078050780 izM = iz0 + diz02*yy0/dy02,
@@ -50857,8 +50857,8 @@ namespace cimg_library {
5085750857 for (int y = cy0; y<=cy2; ++y) {
5085850858 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5085950859 longT
50860- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
50861- xM = x0 + cimg_rd(dx02* yy0,dy02);
50860+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
50861+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5086250862 stc
5086350863 colorm = y<y1?(color0[c] + dcolor01*yy0/dy01):(color1[c] + dcolor12*yy1/dy12),
5086450864 colorM = color0[c] + dcolor02*yy0/dy02;
@@ -50942,12 +50942,12 @@ namespace cimg_library {
5094250942 for (int y = cy0; y<=cy2; ++y) {
5094350943 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5094450944 longT
50945- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
50946- xM = x0 + cimg_rd(dx02* yy0,dy02),
50947- txm = y<y1?tx0 + cimg_rd(dtx01* yy0,dy01):tx1 + cimg_rd(dtx12* yy1,dy12),
50948- txM = tx0 + cimg_rd(dtx02* yy0,dy02),
50949- tym = y<y1?ty0 + cimg_rd(dty01* yy0,dy01):ty1 + cimg_rd(dty12* yy1,dy12),
50950- tyM = ty0 + cimg_rd(dty02* yy0,dy02);
50945+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
50946+ xM = x0 + cimg_rd(dx02, yy0,dy02),
50947+ txm = y<y1?tx0 + cimg_rd(dtx01, yy0,dy01):tx1 + cimg_rd(dtx12, yy1,dy12),
50948+ txM = tx0 + cimg_rd(dtx02, yy0,dy02),
50949+ tym = y<y1?ty0 + cimg_rd(dty01, yy0,dy01):ty1 + cimg_rd(dty12, yy1,dy12),
50950+ tyM = ty0 + cimg_rd(dty02, yy0,dy02);
5095150951 if (xm>xM) cimg::swap(xm,xM,txm,txM,tym,tyM);
5095250952 if (xM>=0 && xm<=w1) {
5095350953 const int
@@ -51022,8 +51022,8 @@ namespace cimg_library {
5102251022 for (int y = cy0; y<=cy2; ++y) {
5102351023 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5102451024 longT
51025- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51026- xM = x0 + cimg_rd(dx02* yy0,dy02);
51025+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51026+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5102751027 float
5102851028 izm = y<y1?(iz0 + diz01*yy0/dy01):(iz1 + diz12*yy1/dy12),
5102951029 izM = iz0 + diz02*yy0/dy02,
@@ -51116,8 +51116,8 @@ namespace cimg_library {
5111651116 for (int y = cy0; y<=cy2; ++y) {
5111751117 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5111851118 longT
51119- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51120- xM = x0 + cimg_rd(dx02* yy0,dy02);
51119+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51120+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5112151121 float
5112251122 izm = y<y1?(iz0 + diz01*yy0/dy01):(iz1 + diz12*yy1/dy12),
5112351123 izM = iz0 + diz02*yy0/dy02,
@@ -51218,12 +51218,12 @@ namespace cimg_library {
5121851218 for (int y = cy0; y<=cy2; ++y) {
5121951219 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5122051220 longT
51221- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51222- xM = x0 + cimg_rd(dx02* yy0,dy02),
51223- lxm = y<y1?lx0 + cimg_rd(dlx01* yy0,dy01):lx1 + cimg_rd(dlx12* yy1,dy12),
51224- lxM = lx0 + cimg_rd(dlx02* yy0,dy02),
51225- lym = y<y1?ly0 + cimg_rd(dly01* yy0,dy01):ly1 + cimg_rd(dly12* yy1,dy12),
51226- lyM = ly0 + cimg_rd(dly02* yy0,dy02);
51221+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51222+ xM = x0 + cimg_rd(dx02, yy0,dy02),
51223+ lxm = y<y1?lx0 + cimg_rd(dlx01, yy0,dy01):lx1 + cimg_rd(dlx12, yy1,dy12),
51224+ lxM = lx0 + cimg_rd(dlx02, yy0,dy02),
51225+ lym = y<y1?ly0 + cimg_rd(dly01, yy0,dy01):ly1 + cimg_rd(dly12, yy1,dy12),
51226+ lyM = ly0 + cimg_rd(dly02, yy0,dy02);
5122751227 if (xm>xM) cimg::swap(xm,xM,lxm,lxM,lym,lyM);
5122851228 if (xM>=0 && xm<=w1) {
5122951229 const int
@@ -51306,12 +51306,12 @@ namespace cimg_library {
5130651306 for (int y = cy0; y<=cy2; ++y) {
5130751307 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5130851308 longT
51309- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51310- xM = x0 + cimg_rd(dx02* yy0,dy02),
51311- lxm = y<y1?lx0 + cimg_rd(dlx01* yy0,dy01):lx1 + cimg_rd(dlx12* yy1,dy12),
51312- lxM = lx0 + cimg_rd(dlx02* yy0,dy02),
51313- lym = y<y1?ly0 + cimg_rd(dly01* yy0,dy01):ly1 + cimg_rd(dly12* yy1,dy12),
51314- lyM = ly0 + cimg_rd(dly02* yy0,dy02);
51309+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51310+ xM = x0 + cimg_rd(dx02, yy0,dy02),
51311+ lxm = y<y1?lx0 + cimg_rd(dlx01, yy0,dy01):lx1 + cimg_rd(dlx12, yy1,dy12),
51312+ lxM = lx0 + cimg_rd(dlx02, yy0,dy02),
51313+ lym = y<y1?ly0 + cimg_rd(dly01, yy0,dy01):ly1 + cimg_rd(dly12, yy1,dy12),
51314+ lyM = ly0 + cimg_rd(dly02, yy0,dy02);
5131551315 float
5131651316 izm = y<y1?(iz0 + diz01*yy0/dy01):(iz1 + diz12*yy1/dy12),
5131751317 izM = iz0 + diz02*yy0/dy02;
@@ -51415,12 +51415,12 @@ namespace cimg_library {
5141551415 for (int y = cy0; y<=cy2; ++y) {
5141651416 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5141751417 longT
51418- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51419- xM = x0 + cimg_rd(dx02* yy0,dy02),
51420- txm = y<y1?tx0 + cimg_rd(dtx01* yy0,dy01):tx1 + cimg_rd(dtx12* yy1,dy12),
51421- txM = tx0 + cimg_rd(dtx02* yy0,dy02),
51422- tym = y<y1?ty0 + cimg_rd(dty01* yy0,dy01):ty1 + cimg_rd(dty12* yy1,dy12),
51423- tyM = ty0 + cimg_rd(dty02* yy0,dy02);
51418+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51419+ xM = x0 + cimg_rd(dx02, yy0,dy02),
51420+ txm = y<y1?tx0 + cimg_rd(dtx01, yy0,dy01):tx1 + cimg_rd(dtx12, yy1,dy12),
51421+ txM = tx0 + cimg_rd(dtx02, yy0,dy02),
51422+ tym = y<y1?ty0 + cimg_rd(dty01, yy0,dy01):ty1 + cimg_rd(dty12, yy1,dy12),
51423+ tyM = ty0 + cimg_rd(dty02, yy0,dy02);
5142451424 float
5142551425 bsm = y<y1?(bs0 + dbs01*yy0/dy01):(bs1 + dbs12*yy1/dy12),
5142651426 bsM = bs0 + dbs02*yy0/dy02;
@@ -51503,8 +51503,8 @@ namespace cimg_library {
5150351503 for (int y = cy0; y<=cy2; ++y) {
5150451504 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5150551505 longT
51506- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51507- xM = x0 + cimg_rd(dx02* yy0,dy02);
51506+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51507+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5150851508 float
5150951509 izm = y<y1?(iz0 + diz01*yy0/dy01):(iz1 + diz12*yy1/dy12),
5151051510 izM = iz0 + diz02*yy0/dy02,
@@ -51602,8 +51602,8 @@ namespace cimg_library {
5160251602 for (int y = cy0; y<=cy2; ++y) {
5160351603 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5160451604 longT
51605- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51606- xM = x0 + cimg_rd(dx02* yy0,dy02);
51605+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51606+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5160751607 float
5160851608 izm = y<y1?(iz0 + diz01*yy0/dy01):(iz1 + diz12*yy1/dy12),
5160951609 izM = iz0 + diz02*yy0/dy02,
@@ -51726,16 +51726,16 @@ namespace cimg_library {
5172651726 for (int y = cy0; y<=cy2; ++y) {
5172751727 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5172851728 longT
51729- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51730- xM = x0 + cimg_rd(dx02* yy0,dy02),
51731- txm = y<y1?tx0 + cimg_rd(dtx01* yy0,dy01):tx1 + cimg_rd(dtx12* yy1,dy12),
51732- txM = tx0 + cimg_rd(dtx02* yy0,dy02),
51733- tym = y<y1?ty0 + cimg_rd(dty01* yy0,dy01):ty1 + cimg_rd(dty12* yy1,dy12),
51734- tyM = ty0 + cimg_rd(dty02* yy0,dy02),
51735- lxm = y<y1?lx0 + cimg_rd(dlx01* yy0,dy01):lx1 + cimg_rd(dlx12* yy1,dy12),
51736- lxM = lx0 + cimg_rd(dlx02* yy0,dy02),
51737- lym = y<y1?ly0 + cimg_rd(dly01* yy0,dy01):ly1 + cimg_rd(dly12* yy1,dy12),
51738- lyM = ly0 + cimg_rd(dly02* yy0,dy02);
51729+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51730+ xM = x0 + cimg_rd(dx02, yy0,dy02),
51731+ txm = y<y1?tx0 + cimg_rd(dtx01, yy0,dy01):tx1 + cimg_rd(dtx12, yy1,dy12),
51732+ txM = tx0 + cimg_rd(dtx02, yy0,dy02),
51733+ tym = y<y1?ty0 + cimg_rd(dty01, yy0,dy01):ty1 + cimg_rd(dty12, yy1,dy12),
51734+ tyM = ty0 + cimg_rd(dty02, yy0,dy02),
51735+ lxm = y<y1?lx0 + cimg_rd(dlx01, yy0,dy01):lx1 + cimg_rd(dlx12, yy1,dy12),
51736+ lxM = lx0 + cimg_rd(dlx02, yy0,dy02),
51737+ lym = y<y1?ly0 + cimg_rd(dly01, yy0,dy01):ly1 + cimg_rd(dly12, yy1,dy12),
51738+ lyM = ly0 + cimg_rd(dly02, yy0,dy02);
5173951739 if (xm>xM) cimg::swap(xm,xM,txm,txM,tym,tyM,lxm,lxM,lym,lyM);
5174051740 if (xM>=0 && xm<=w1) {
5174151741 const int
@@ -51832,8 +51832,8 @@ namespace cimg_library {
5183251832 for (int y = cy0; y<=cy2; ++y) {
5183351833 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5183451834 longT
51835- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51836- xM = x0 + cimg_rd(dx02* yy0,dy02);
51835+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51836+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5183751837 float
5183851838 izm = y<y1?(iz0 + diz01*yy0/dy01):(iz1 + diz12*yy1/dy12),
5183951839 izM = iz0 + diz02*yy0/dy02,
@@ -51955,8 +51955,8 @@ namespace cimg_library {
5195551955 for (int y = cy0; y<=cy2; ++y) {
5195651956 const longT yy0 = (longT)y - y0, yy1 = (longT)y - y1;
5195751957 longT
51958- xm = y<y1?x0 + cimg_rd(dx01* yy0,dy01):x1 + cimg_rd(dx12* yy1,dy12),
51959- xM = x0 + cimg_rd(dx02* yy0,dy02);
51958+ xm = y<y1?x0 + cimg_rd(dx01, yy0,dy01):x1 + cimg_rd(dx12, yy1,dy12),
51959+ xM = x0 + cimg_rd(dx02, yy0,dy02);
5196051960 float
5196151961 izm = y<y1?(iz0 + diz01*yy0/dy01):(iz1 + diz12*yy1/dy12),
5196251962 izM = iz0 + diz02*yy0/dy02,
@@ -52180,7 +52180,7 @@ namespace cimg_library {
5218052180 tend = tmax - (step==cimg::sign(y12));
5218152181 unsigned int y = (unsigned int)y0 - ymin;
5218252182 for (int t = 0; t<=tend; ++t, y+=step)
52183- if (y<Xs._height) Xs(count[y]++,y) = x0 + cimg_rd(t* x01,tmax);
52183+ if (y<Xs._height) Xs(count[y]++,y) = x0 + cimg_rd(t, x01,tmax);
5218452184 }
5218552185 go_on = nn>n;
5218652186 n = nn;
0 commit comments