Lines 302-313
bool CxImage::RotateLeft(CxImage* iDst)
Link Here
|
302 |
for (ys = 0; ys < newHeight; ys+=RBLOCK) { |
302 |
for (ys = 0; ys < newHeight; ys+=RBLOCK) { |
303 |
if (head.biBitCount==24) { |
303 |
if (head.biBitCount==24) { |
304 |
//RGB24 optimized pixel access: |
304 |
//RGB24 optimized pixel access: |
305 |
for (x = xs; x < min(newWidth, xs+RBLOCK); x++){ //do rotation |
305 |
for (x = xs; x < minimum(newWidth, xs+RBLOCK); x++){ //do rotation |
306 |
info.nProgress = (long)(100*x/newWidth); |
306 |
info.nProgress = (long)(100*x/newWidth); |
307 |
x2=newWidth-x-1; |
307 |
x2=newWidth-x-1; |
308 |
dstPtr = (BYTE*) imgDest.BlindGetPixelPointer(x,ys); |
308 |
dstPtr = (BYTE*) imgDest.BlindGetPixelPointer(x,ys); |
309 |
srcPtr = (BYTE*) BlindGetPixelPointer(ys, x2); |
309 |
srcPtr = (BYTE*) BlindGetPixelPointer(ys, x2); |
310 |
for (y = ys; y < min(newHeight, ys+RBLOCK); y++){ |
310 |
for (y = ys; y < minimum(newHeight, ys+RBLOCK); y++){ |
311 |
//imgDest.SetPixelColor(x, y, GetPixelColor(y, x2)); |
311 |
//imgDest.SetPixelColor(x, y, GetPixelColor(y, x2)); |
312 |
*(dstPtr) = *(srcPtr); |
312 |
*(dstPtr) = *(srcPtr); |
313 |
*(dstPtr+1) = *(srcPtr+1); |
313 |
*(dstPtr+1) = *(srcPtr+1); |
Lines 318-336
bool CxImage::RotateLeft(CxImage* iDst)
Link Here
|
318 |
}//for x |
318 |
}//for x |
319 |
} else { |
319 |
} else { |
320 |
//anything else than 24bpp (and 1bpp): palette |
320 |
//anything else than 24bpp (and 1bpp): palette |
321 |
for (x = xs; x < min(newWidth, xs+RBLOCK); x++){ |
321 |
for (x = xs; x < minimum(newWidth, xs+RBLOCK); x++){ |
322 |
info.nProgress = (long)(100*x/newWidth); //<Anatoly Ivasyuk> |
322 |
info.nProgress = (long)(100*x/newWidth); //<Anatoly Ivasyuk> |
323 |
x2=newWidth-x-1; |
323 |
x2=newWidth-x-1; |
324 |
for (y = ys; y < min(newHeight, ys+RBLOCK); y++){ |
324 |
for (y = ys; y < minimum(newHeight, ys+RBLOCK); y++){ |
325 |
imgDest.SetPixelIndex(x, y, BlindGetPixelIndex(y, x2)); |
325 |
imgDest.SetPixelIndex(x, y, BlindGetPixelIndex(y, x2)); |
326 |
}//for y |
326 |
}//for y |
327 |
}//for x |
327 |
}//for x |
328 |
}//if (version selection) |
328 |
}//if (version selection) |
329 |
#if CXIMAGE_SUPPORT_ALPHA |
329 |
#if CXIMAGE_SUPPORT_ALPHA |
330 |
if (AlphaIsValid()) { |
330 |
if (AlphaIsValid()) { |
331 |
for (x = xs; x < min(newWidth, xs+RBLOCK); x++){ |
331 |
for (x = xs; x < minimum(newWidth, xs+RBLOCK); x++){ |
332 |
x2=newWidth-x-1; |
332 |
x2=newWidth-x-1; |
333 |
for (y = ys; y < min(newHeight, ys+RBLOCK); y++){ |
333 |
for (y = ys; y < minimum(newHeight, ys+RBLOCK); y++){ |
334 |
imgDest.AlphaSet(x,y,BlindAlphaGet(y, x2)); |
334 |
imgDest.AlphaSet(x,y,BlindAlphaGet(y, x2)); |
335 |
}//for y |
335 |
}//for y |
336 |
}//for x |
336 |
}//for x |
Lines 343-351
bool CxImage::RotateLeft(CxImage* iDst)
Link Here
|
343 |
imgDest.info.rSelectionBox.right = newWidth-info.rSelectionBox.bottom; |
343 |
imgDest.info.rSelectionBox.right = newWidth-info.rSelectionBox.bottom; |
344 |
imgDest.info.rSelectionBox.bottom = info.rSelectionBox.left; |
344 |
imgDest.info.rSelectionBox.bottom = info.rSelectionBox.left; |
345 |
imgDest.info.rSelectionBox.top = info.rSelectionBox.right; |
345 |
imgDest.info.rSelectionBox.top = info.rSelectionBox.right; |
346 |
for (x = xs; x < min(newWidth, xs+RBLOCK); x++){ |
346 |
for (x = xs; x < minimum(newWidth, xs+RBLOCK); x++){ |
347 |
x2=newWidth-x-1; |
347 |
x2=newWidth-x-1; |
348 |
for (y = ys; y < min(newHeight, ys+RBLOCK); y++){ |
348 |
for (y = ys; y < minimum(newHeight, ys+RBLOCK); y++){ |
349 |
imgDest.SelectionSet(x,y,BlindSelectionGet(y, x2)); |
349 |
imgDest.SelectionSet(x,y,BlindSelectionGet(y, x2)); |
350 |
}//for y |
350 |
}//for y |
351 |
}//for x |
351 |
}//for x |
Lines 447-458
bool CxImage::RotateRight(CxImage* iDst)
Link Here
|
447 |
for (ys = 0; ys < newHeight; ys+=RBLOCK) { |
447 |
for (ys = 0; ys < newHeight; ys+=RBLOCK) { |
448 |
if (head.biBitCount==24) { |
448 |
if (head.biBitCount==24) { |
449 |
//RGB24 optimized pixel access: |
449 |
//RGB24 optimized pixel access: |
450 |
for (y = ys; y < min(newHeight, ys+RBLOCK); y++){ |
450 |
for (y = ys; y < minimum(newHeight, ys+RBLOCK); y++){ |
451 |
info.nProgress = (long)(100*y/newHeight); //<Anatoly Ivasyuk> |
451 |
info.nProgress = (long)(100*y/newHeight); //<Anatoly Ivasyuk> |
452 |
y2=newHeight-y-1; |
452 |
y2=newHeight-y-1; |
453 |
dstPtr = (BYTE*) imgDest.BlindGetPixelPointer(xs,y); |
453 |
dstPtr = (BYTE*) imgDest.BlindGetPixelPointer(xs,y); |
454 |
srcPtr = (BYTE*) BlindGetPixelPointer(y2, xs); |
454 |
srcPtr = (BYTE*) BlindGetPixelPointer(y2, xs); |
455 |
for (x = xs; x < min(newWidth, xs+RBLOCK); x++){ |
455 |
for (x = xs; x < minimum(newWidth, xs+RBLOCK); x++){ |
456 |
//imgDest.SetPixelColor(x, y, GetPixelColor(y2, x)); |
456 |
//imgDest.SetPixelColor(x, y, GetPixelColor(y2, x)); |
457 |
*(dstPtr) = *(srcPtr); |
457 |
*(dstPtr) = *(srcPtr); |
458 |
*(dstPtr+1) = *(srcPtr+1); |
458 |
*(dstPtr+1) = *(srcPtr+1); |
Lines 463-481
bool CxImage::RotateRight(CxImage* iDst)
Link Here
|
463 |
}//for y |
463 |
}//for y |
464 |
} else { |
464 |
} else { |
465 |
//anything else than BW & RGB24: palette |
465 |
//anything else than BW & RGB24: palette |
466 |
for (y = ys; y < min(newHeight, ys+RBLOCK); y++){ |
466 |
for (y = ys; y < minimum(newHeight, ys+RBLOCK); y++){ |
467 |
info.nProgress = (long)(100*y/newHeight); //<Anatoly Ivasyuk> |
467 |
info.nProgress = (long)(100*y/newHeight); //<Anatoly Ivasyuk> |
468 |
y2=newHeight-y-1; |
468 |
y2=newHeight-y-1; |
469 |
for (x = xs; x < min(newWidth, xs+RBLOCK); x++){ |
469 |
for (x = xs; x < minimum(newWidth, xs+RBLOCK); x++){ |
470 |
imgDest.SetPixelIndex(x, y, BlindGetPixelIndex(y2, x)); |
470 |
imgDest.SetPixelIndex(x, y, BlindGetPixelIndex(y2, x)); |
471 |
}//for x |
471 |
}//for x |
472 |
}//for y |
472 |
}//for y |
473 |
}//if |
473 |
}//if |
474 |
#if CXIMAGE_SUPPORT_ALPHA |
474 |
#if CXIMAGE_SUPPORT_ALPHA |
475 |
if (AlphaIsValid()){ |
475 |
if (AlphaIsValid()){ |
476 |
for (y = ys; y < min(newHeight, ys+RBLOCK); y++){ |
476 |
for (y = ys; y < minimum(newHeight, ys+RBLOCK); y++){ |
477 |
y2=newHeight-y-1; |
477 |
y2=newHeight-y-1; |
478 |
for (x = xs; x < min(newWidth, xs+RBLOCK); x++){ |
478 |
for (x = xs; x < minimum(newWidth, xs+RBLOCK); x++){ |
479 |
imgDest.AlphaSet(x,y,BlindAlphaGet(y2, x)); |
479 |
imgDest.AlphaSet(x,y,BlindAlphaGet(y2, x)); |
480 |
}//for x |
480 |
}//for x |
481 |
}//for y |
481 |
}//for y |
Lines 488-496
bool CxImage::RotateRight(CxImage* iDst)
Link Here
|
488 |
imgDest.info.rSelectionBox.right = info.rSelectionBox.top; |
488 |
imgDest.info.rSelectionBox.right = info.rSelectionBox.top; |
489 |
imgDest.info.rSelectionBox.bottom = newHeight-info.rSelectionBox.right; |
489 |
imgDest.info.rSelectionBox.bottom = newHeight-info.rSelectionBox.right; |
490 |
imgDest.info.rSelectionBox.top = newHeight-info.rSelectionBox.left; |
490 |
imgDest.info.rSelectionBox.top = newHeight-info.rSelectionBox.left; |
491 |
for (y = ys; y < min(newHeight, ys+RBLOCK); y++){ |
491 |
for (y = ys; y < minimum(newHeight, ys+RBLOCK); y++){ |
492 |
y2=newHeight-y-1; |
492 |
y2=newHeight-y-1; |
493 |
for (x = xs; x < min(newWidth, xs+RBLOCK); x++){ |
493 |
for (x = xs; x < minimum(newWidth, xs+RBLOCK); x++){ |
494 |
imgDest.SelectionSet(x,y,BlindSelectionGet(y2, x)); |
494 |
imgDest.SelectionSet(x,y,BlindSelectionGet(y2, x)); |
495 |
}//for x |
495 |
}//for x |
496 |
}//for y |
496 |
}//for y |
Lines 608-617
bool CxImage::Rotate(float angle, CxImage* iDst)
Link Here
|
608 |
newP4.x = (float)(p4.x*cos_angle - p4.y*sin_angle); |
608 |
newP4.x = (float)(p4.x*cos_angle - p4.y*sin_angle); |
609 |
newP4.y = (float)(p4.x*sin_angle + p4.y*cos_angle); |
609 |
newP4.y = (float)(p4.x*sin_angle + p4.y*cos_angle); |
610 |
|
610 |
|
611 |
leftTop.x = min(min(newP1.x,newP2.x),min(newP3.x,newP4.x)); |
611 |
leftTop.x = minimum(minimum(newP1.x,newP2.x),minimum(newP3.x,newP4.x)); |
612 |
leftTop.y = min(min(newP1.y,newP2.y),min(newP3.y,newP4.y)); |
612 |
leftTop.y = minimum(minimum(newP1.y,newP2.y),minimum(newP3.y,newP4.y)); |
613 |
rightBottom.x = max(max(newP1.x,newP2.x),max(newP3.x,newP4.x)); |
613 |
rightBottom.x = maximum(maximum(newP1.x,newP2.x),maximum(newP3.x,newP4.x)); |
614 |
rightBottom.y = max(max(newP1.y,newP2.y),max(newP3.y,newP4.y)); |
614 |
rightBottom.y = maximum(maximum(newP1.y,newP2.y),maximum(newP3.y,newP4.y)); |
615 |
leftBottom.x = leftTop.x; |
615 |
leftBottom.x = leftTop.x; |
616 |
leftBottom.y = rightBottom.y; |
616 |
leftBottom.y = rightBottom.y; |
617 |
rightTop.x = rightBottom.x; |
617 |
rightTop.x = rightBottom.x; |
Lines 740-749
bool CxImage::Rotate2(float angle,
Link Here
|
740 |
}//if |
740 |
}//if |
741 |
|
741 |
|
742 |
//(read new dimensions from location of corners) |
742 |
//(read new dimensions from location of corners) |
743 |
float minx = (float) min(min(newp[0].x,newp[1].x),min(newp[2].x,newp[3].x)); |
743 |
float minx = (float) minimum(minimum(newp[0].x,newp[1].x),minimum(newp[2].x,newp[3].x)); |
744 |
float miny = (float) min(min(newp[0].y,newp[1].y),min(newp[2].y,newp[3].y)); |
744 |
float miny = (float) minimum(minimum(newp[0].y,newp[1].y),minimum(newp[2].y,newp[3].y)); |
745 |
float maxx = (float) max(max(newp[0].x,newp[1].x),max(newp[2].x,newp[3].x)); |
745 |
float maxx = (float) maximum(maximum(newp[0].x,newp[1].x),maximum(newp[2].x,newp[3].x)); |
746 |
float maxy = (float) max(max(newp[0].y,newp[1].y),max(newp[2].y,newp[3].y)); |
746 |
float maxy = (float) maximum(maximum(newp[0].y,newp[1].y),maximum(newp[2].y,newp[3].y)); |
747 |
int newWidth = (int) floor(maxx-minx+0.5f); |
747 |
int newWidth = (int) floor(maxx-minx+0.5f); |
748 |
int newHeight= (int) floor(maxy-miny+0.5f); |
748 |
int newHeight= (int) floor(maxy-miny+0.5f); |
749 |
float ssx=((maxx+minx)- ((float) newWidth-1))/2.0f; //start for x |
749 |
float ssx=((maxx+minx)- ((float) newWidth-1))/2.0f; //start for x |
Lines 1003-1014
bool CxImage::Resample(long newx, long newy, int mode, CxImage* iDst)
Link Here
|
1003 |
if (info.nEscape) break; |
1003 |
if (info.nEscape) break; |
1004 |
fY = y * yScale; |
1004 |
fY = y * yScale; |
1005 |
ifY = (int)fY; |
1005 |
ifY = (int)fY; |
1006 |
ifY1 = min(ymax, ifY+1); |
1006 |
ifY1 = minimum(ymax, ifY+1); |
1007 |
dy = fY - ifY; |
1007 |
dy = fY - ifY; |
1008 |
for(long x=0; x<newx; x++){ |
1008 |
for(long x=0; x<newx; x++){ |
1009 |
fX = x * xScale; |
1009 |
fX = x * xScale; |
1010 |
ifX = (int)fX; |
1010 |
ifX = (int)fX; |
1011 |
ifX1 = min(xmax, ifX+1); |
1011 |
ifX1 = minimum(xmax, ifX+1); |
1012 |
dx = fX - ifX; |
1012 |
dx = fX - ifX; |
1013 |
// Interpolate using the four nearest pixels in the source |
1013 |
// Interpolate using the four nearest pixels in the source |
1014 |
if (head.biClrUsed){ |
1014 |
if (head.biClrUsed){ |
Lines 1328-1336
bool CxImage::DecreaseBpp(DWORD nbit, bool errordiffusion, RGBQUAD* ppal, DWORD
Link Here
|
1328 |
eb=(long)c.rgbBlue - (long)ce.rgbBlue; |
1328 |
eb=(long)c.rgbBlue - (long)ce.rgbBlue; |
1329 |
|
1329 |
|
1330 |
c = GetPixelColor(x+1,y); |
1330 |
c = GetPixelColor(x+1,y); |
1331 |
c.rgbRed = (BYTE)min(255L,max(0L,(long)c.rgbRed + ((er*7)/16))); |
1331 |
c.rgbRed = (BYTE)minimum(255L,maximum(0L,(long)c.rgbRed + ((er*7)/16))); |
1332 |
c.rgbGreen = (BYTE)min(255L,max(0L,(long)c.rgbGreen + ((eg*7)/16))); |
1332 |
c.rgbGreen = (BYTE)minimum(255L,maximum(0L,(long)c.rgbGreen + ((eg*7)/16))); |
1333 |
c.rgbBlue = (BYTE)min(255L,max(0L,(long)c.rgbBlue + ((eb*7)/16))); |
1333 |
c.rgbBlue = (BYTE)minimum(255L,maximum(0L,(long)c.rgbBlue + ((eb*7)/16))); |
1334 |
SetPixelColor(x+1,y,c); |
1334 |
SetPixelColor(x+1,y,c); |
1335 |
int coeff=1; |
1335 |
int coeff=1; |
1336 |
for(int i=-1; i<2; i++){ |
1336 |
for(int i=-1; i<2; i++){ |
Lines 1343-1351
bool CxImage::DecreaseBpp(DWORD nbit, bool errordiffusion, RGBQUAD* ppal, DWORD
Link Here
|
1343 |
coeff=1; break; |
1343 |
coeff=1; break; |
1344 |
} |
1344 |
} |
1345 |
c = GetPixelColor(x+i,y+1); |
1345 |
c = GetPixelColor(x+i,y+1); |
1346 |
c.rgbRed = (BYTE)min(255L,max(0L,(long)c.rgbRed + ((er * coeff)/16))); |
1346 |
c.rgbRed = (BYTE)minimum(255L,maximum(0L,(long)c.rgbRed + ((er * coeff)/16))); |
1347 |
c.rgbGreen = (BYTE)min(255L,max(0L,(long)c.rgbGreen + ((eg * coeff)/16))); |
1347 |
c.rgbGreen = (BYTE)minimum(255L,maximum(0L,(long)c.rgbGreen + ((eg * coeff)/16))); |
1348 |
c.rgbBlue = (BYTE)min(255L,max(0L,(long)c.rgbBlue + ((eb * coeff)/16))); |
1348 |
c.rgbBlue = (BYTE)minimum(255L,maximum(0L,(long)c.rgbBlue + ((eb * coeff)/16))); |
1349 |
SetPixelColor(x+i,y+1,c); |
1349 |
SetPixelColor(x+i,y+1,c); |
1350 |
} |
1350 |
} |
1351 |
} |
1351 |
} |
Lines 1566-1575
bool CxImage::Dither(long method)
Link Here
|
1566 |
} |
1566 |
} |
1567 |
|
1567 |
|
1568 |
nlevel = GetPixelIndex(x + 1, y) + (error * 8) / TotalCoeffSum; |
1568 |
nlevel = GetPixelIndex(x + 1, y) + (error * 8) / TotalCoeffSum; |
1569 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1569 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1570 |
SetPixelIndex(x + 1, y, level); |
1570 |
SetPixelIndex(x + 1, y, level); |
1571 |
nlevel = GetPixelIndex(x + 2, y) + (error * 4) / TotalCoeffSum; |
1571 |
nlevel = GetPixelIndex(x + 2, y) + (error * 4) / TotalCoeffSum; |
1572 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1572 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1573 |
SetPixelIndex(x + 2, y, level); |
1573 |
SetPixelIndex(x + 2, y, level); |
1574 |
int i; |
1574 |
int i; |
1575 |
for (i = -2; i < 3; i++) { |
1575 |
for (i = -2; i < 3; i++) { |
Lines 1591-1597
bool CxImage::Dither(long method)
Link Here
|
1591 |
break; |
1591 |
break; |
1592 |
} |
1592 |
} |
1593 |
nlevel = GetPixelIndex(x + i, y + 1) + (error * coeff) / TotalCoeffSum; |
1593 |
nlevel = GetPixelIndex(x + i, y + 1) + (error * coeff) / TotalCoeffSum; |
1594 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1594 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1595 |
SetPixelIndex(x + i, y + 1, level); |
1595 |
SetPixelIndex(x + i, y + 1, level); |
1596 |
} |
1596 |
} |
1597 |
} |
1597 |
} |
Lines 1620-1629
bool CxImage::Dither(long method)
Link Here
|
1620 |
} |
1620 |
} |
1621 |
|
1621 |
|
1622 |
nlevel = GetPixelIndex(x + 1, y) + (error * 8) / TotalCoeffSum; |
1622 |
nlevel = GetPixelIndex(x + 1, y) + (error * 8) / TotalCoeffSum; |
1623 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1623 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1624 |
SetPixelIndex(x + 1, y, level); |
1624 |
SetPixelIndex(x + 1, y, level); |
1625 |
nlevel = GetPixelIndex(x + 2, y) + (error * 4) / TotalCoeffSum; |
1625 |
nlevel = GetPixelIndex(x + 2, y) + (error * 4) / TotalCoeffSum; |
1626 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1626 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1627 |
SetPixelIndex(x + 2, y, level); |
1627 |
SetPixelIndex(x + 2, y, level); |
1628 |
int i; |
1628 |
int i; |
1629 |
for (i = -2; i < 3; i++) { |
1629 |
for (i = -2; i < 3; i++) { |
Lines 1645-1651
bool CxImage::Dither(long method)
Link Here
|
1645 |
break; |
1645 |
break; |
1646 |
} |
1646 |
} |
1647 |
nlevel = GetPixelIndex(x + i, y + 1) + (error * coeff) / TotalCoeffSum; |
1647 |
nlevel = GetPixelIndex(x + i, y + 1) + (error * coeff) / TotalCoeffSum; |
1648 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1648 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1649 |
SetPixelIndex(x + i, y + 1, level); |
1649 |
SetPixelIndex(x + i, y + 1, level); |
1650 |
} |
1650 |
} |
1651 |
for (i = -2; i < 3; i++) { |
1651 |
for (i = -2; i < 3; i++) { |
Lines 1667-1673
bool CxImage::Dither(long method)
Link Here
|
1667 |
break; |
1667 |
break; |
1668 |
} |
1668 |
} |
1669 |
nlevel = GetPixelIndex(x + i, y + 2) + (error * coeff) / TotalCoeffSum; |
1669 |
nlevel = GetPixelIndex(x + i, y + 2) + (error * coeff) / TotalCoeffSum; |
1670 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1670 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1671 |
SetPixelIndex(x + i, y + 2, level); |
1671 |
SetPixelIndex(x + i, y + 2, level); |
1672 |
} |
1672 |
} |
1673 |
} |
1673 |
} |
Lines 1696-1705
bool CxImage::Dither(long method)
Link Here
|
1696 |
} |
1696 |
} |
1697 |
|
1697 |
|
1698 |
nlevel = GetPixelIndex(x + 1, y) + (error * 7) / TotalCoeffSum; |
1698 |
nlevel = GetPixelIndex(x + 1, y) + (error * 7) / TotalCoeffSum; |
1699 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1699 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1700 |
SetPixelIndex(x + 1, y, level); |
1700 |
SetPixelIndex(x + 1, y, level); |
1701 |
nlevel = GetPixelIndex(x + 2, y) + (error * 5) / TotalCoeffSum; |
1701 |
nlevel = GetPixelIndex(x + 2, y) + (error * 5) / TotalCoeffSum; |
1702 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1702 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1703 |
SetPixelIndex(x + 2, y, level); |
1703 |
SetPixelIndex(x + 2, y, level); |
1704 |
int i; |
1704 |
int i; |
1705 |
for (i = -2; i < 3; i++) { |
1705 |
for (i = -2; i < 3; i++) { |
Lines 1721-1727
bool CxImage::Dither(long method)
Link Here
|
1721 |
break; |
1721 |
break; |
1722 |
} |
1722 |
} |
1723 |
nlevel = GetPixelIndex(x + i, y + 1) + (error * coeff) / TotalCoeffSum; |
1723 |
nlevel = GetPixelIndex(x + i, y + 1) + (error * coeff) / TotalCoeffSum; |
1724 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1724 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1725 |
SetPixelIndex(x + i, y + 1, level); |
1725 |
SetPixelIndex(x + i, y + 1, level); |
1726 |
} |
1726 |
} |
1727 |
for (i = -2; i < 3; i++) { |
1727 |
for (i = -2; i < 3; i++) { |
Lines 1743-1749
bool CxImage::Dither(long method)
Link Here
|
1743 |
break; |
1743 |
break; |
1744 |
} |
1744 |
} |
1745 |
nlevel = GetPixelIndex(x + i, y + 2) + (error * coeff) / TotalCoeffSum; |
1745 |
nlevel = GetPixelIndex(x + i, y + 2) + (error * coeff) / TotalCoeffSum; |
1746 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1746 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1747 |
SetPixelIndex(x + i, y + 2, level); |
1747 |
SetPixelIndex(x + i, y + 2, level); |
1748 |
} |
1748 |
} |
1749 |
} |
1749 |
} |
Lines 1772-1781
bool CxImage::Dither(long method)
Link Here
|
1772 |
} |
1772 |
} |
1773 |
|
1773 |
|
1774 |
nlevel = GetPixelIndex(x + 1, y) + (error * 5) / TotalCoeffSum; |
1774 |
nlevel = GetPixelIndex(x + 1, y) + (error * 5) / TotalCoeffSum; |
1775 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1775 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1776 |
SetPixelIndex(x + 1, y, level); |
1776 |
SetPixelIndex(x + 1, y, level); |
1777 |
nlevel = GetPixelIndex(x + 2, y) + (error * 3) / TotalCoeffSum; |
1777 |
nlevel = GetPixelIndex(x + 2, y) + (error * 3) / TotalCoeffSum; |
1778 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1778 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1779 |
SetPixelIndex(x + 2, y, level); |
1779 |
SetPixelIndex(x + 2, y, level); |
1780 |
int i; |
1780 |
int i; |
1781 |
for (i = -2; i < 3; i++) { |
1781 |
for (i = -2; i < 3; i++) { |
Lines 1797-1803
bool CxImage::Dither(long method)
Link Here
|
1797 |
break; |
1797 |
break; |
1798 |
} |
1798 |
} |
1799 |
nlevel = GetPixelIndex(x + i, y + 1) + (error * coeff) / TotalCoeffSum; |
1799 |
nlevel = GetPixelIndex(x + i, y + 1) + (error * coeff) / TotalCoeffSum; |
1800 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1800 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1801 |
SetPixelIndex(x + i, y + 1, level); |
1801 |
SetPixelIndex(x + i, y + 1, level); |
1802 |
} |
1802 |
} |
1803 |
for (i = -1; i < 2; i++) { |
1803 |
for (i = -1; i < 2; i++) { |
Lines 1813-1819
bool CxImage::Dither(long method)
Link Here
|
1813 |
break; |
1813 |
break; |
1814 |
} |
1814 |
} |
1815 |
nlevel = GetPixelIndex(x + i, y + 2) + (error * coeff) / TotalCoeffSum; |
1815 |
nlevel = GetPixelIndex(x + i, y + 2) + (error * coeff) / TotalCoeffSum; |
1816 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1816 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1817 |
SetPixelIndex(x + i, y + 2, level); |
1817 |
SetPixelIndex(x + i, y + 2, level); |
1818 |
} |
1818 |
} |
1819 |
} |
1819 |
} |
Lines 1845-1920
bool CxImage::Dither(long method)
Link Here
|
1845 |
int tmp_index_y = y; |
1845 |
int tmp_index_y = y; |
1846 |
int tmp_coeff = 32; |
1846 |
int tmp_coeff = 32; |
1847 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1847 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1848 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1848 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1849 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1849 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1850 |
|
1850 |
|
1851 |
tmp_index_x = x - 3; |
1851 |
tmp_index_x = x - 3; |
1852 |
tmp_index_y = y + 1; |
1852 |
tmp_index_y = y + 1; |
1853 |
tmp_coeff = 12; |
1853 |
tmp_coeff = 12; |
1854 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1854 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1855 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1855 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1856 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1856 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1857 |
|
1857 |
|
1858 |
tmp_index_x = x - 1; |
1858 |
tmp_index_x = x - 1; |
1859 |
tmp_coeff = 26; |
1859 |
tmp_coeff = 26; |
1860 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1860 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1861 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1861 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1862 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1862 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1863 |
|
1863 |
|
1864 |
tmp_index_x = x + 1; |
1864 |
tmp_index_x = x + 1; |
1865 |
tmp_coeff = 30; |
1865 |
tmp_coeff = 30; |
1866 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1866 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1867 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1867 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1868 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1868 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1869 |
|
1869 |
|
1870 |
tmp_index_x = x + 3; |
1870 |
tmp_index_x = x + 3; |
1871 |
tmp_coeff = 16; |
1871 |
tmp_coeff = 16; |
1872 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1872 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1873 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1873 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1874 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1874 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1875 |
|
1875 |
|
1876 |
tmp_index_x = x - 2; |
1876 |
tmp_index_x = x - 2; |
1877 |
tmp_index_y = y + 2; |
1877 |
tmp_index_y = y + 2; |
1878 |
tmp_coeff = 12; |
1878 |
tmp_coeff = 12; |
1879 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1879 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1880 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1880 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1881 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1881 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1882 |
|
1882 |
|
1883 |
tmp_index_x = x; |
1883 |
tmp_index_x = x; |
1884 |
tmp_coeff = 26; |
1884 |
tmp_coeff = 26; |
1885 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1885 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1886 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1886 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1887 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1887 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1888 |
|
1888 |
|
1889 |
tmp_index_x = x + 2; |
1889 |
tmp_index_x = x + 2; |
1890 |
tmp_coeff = 12; |
1890 |
tmp_coeff = 12; |
1891 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1891 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1892 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1892 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1893 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1893 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1894 |
|
1894 |
|
1895 |
tmp_index_x = x - 3; |
1895 |
tmp_index_x = x - 3; |
1896 |
tmp_index_y = y + 3; |
1896 |
tmp_index_y = y + 3; |
1897 |
tmp_coeff = 5; |
1897 |
tmp_coeff = 5; |
1898 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1898 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1899 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1899 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1900 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1900 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1901 |
|
1901 |
|
1902 |
tmp_index_x = x - 1; |
1902 |
tmp_index_x = x - 1; |
1903 |
tmp_coeff = 12; |
1903 |
tmp_coeff = 12; |
1904 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1904 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1905 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1905 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1906 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1906 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1907 |
|
1907 |
|
1908 |
tmp_index_x = x + 1; |
1908 |
tmp_index_x = x + 1; |
1909 |
tmp_coeff = 12; |
1909 |
tmp_coeff = 12; |
1910 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1910 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1911 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1911 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1912 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1912 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1913 |
|
1913 |
|
1914 |
tmp_index_x = x + 3; |
1914 |
tmp_index_x = x + 3; |
1915 |
tmp_coeff = 5; |
1915 |
tmp_coeff = 5; |
1916 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1916 |
nlevel = GetPixelIndex(tmp_index_x, tmp_index_y) + (error * tmp_coeff) / TotalCoeffSum; |
1917 |
level = (BYTE)min(255, max(0, (int)nlevel)); |
1917 |
level = (BYTE)minimum(255, maximum(0, (int)nlevel)); |
1918 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1918 |
SetPixelIndex(tmp_index_x, tmp_index_y, level); |
1919 |
} |
1919 |
} |
1920 |
} |
1920 |
} |
Lines 1941-1947
bool CxImage::Dither(long method)
Link Here
|
1941 |
Bmatrix[i] = (BYTE)(dither); |
1941 |
Bmatrix[i] = (BYTE)(dither); |
1942 |
} |
1942 |
} |
1943 |
|
1943 |
|
1944 |
int scale = max(0,(8-2*order)); |
1944 |
int scale = maximum(0,(8-2*order)); |
1945 |
int level; |
1945 |
int level; |
1946 |
for (long y=0;y<head.biHeight;y++){ |
1946 |
for (long y=0;y<head.biHeight;y++){ |
1947 |
info.nProgress = (long)(100*y/head.biHeight); |
1947 |
info.nProgress = (long)(100*y/head.biHeight); |
Lines 1981-1987
bool CxImage::Dither(long method)
Link Here
|
1981 |
} |
1981 |
} |
1982 |
|
1982 |
|
1983 |
nlevel = GetPixelIndex(x+1,y) + (error * 7)/16; |
1983 |
nlevel = GetPixelIndex(x+1,y) + (error * 7)/16; |
1984 |
level = (BYTE)min(255,max(0,(int)nlevel)); |
1984 |
level = (BYTE)minimum(255,maximum(0,(int)nlevel)); |
1985 |
SetPixelIndex(x+1,y,level); |
1985 |
SetPixelIndex(x+1,y,level); |
1986 |
for(int i=-1; i<2; i++){ |
1986 |
for(int i=-1; i<2; i++){ |
1987 |
switch(i){ |
1987 |
switch(i){ |
Lines 1993-1999
bool CxImage::Dither(long method)
Link Here
|
1993 |
coeff=1; break; |
1993 |
coeff=1; break; |
1994 |
} |
1994 |
} |
1995 |
nlevel = GetPixelIndex(x+i,y+1) + (error * coeff)/16; |
1995 |
nlevel = GetPixelIndex(x+i,y+1) + (error * coeff)/16; |
1996 |
level = (BYTE)min(255,max(0,(int)nlevel)); |
1996 |
level = (BYTE)minimum(255,maximum(0,(int)nlevel)); |
1997 |
SetPixelIndex(x+i,y+1,level); |
1997 |
SetPixelIndex(x+i,y+1,level); |
1998 |
} |
1998 |
} |
1999 |
} |
1999 |
} |
Lines 2031-2037
bool CxImage::CropRotatedRectangle( long topx, long topy, long width, long heigh
Link Here
|
2031 |
if ( fabs(angle)<0.0002 ) |
2031 |
if ( fabs(angle)<0.0002 ) |
2032 |
return Crop( topx, topy, topx+width, topy+height, iDst); |
2032 |
return Crop( topx, topy, topx+width, topy+height, iDst); |
2033 |
|
2033 |
|
2034 |
startx = min(topx, topx - (long)(sin_angle*(double)height)); |
2034 |
startx = minimum(topx, topx - (long)(sin_angle*(double)height)); |
2035 |
endx = topx + (long)(cos_angle*(double)width); |
2035 |
endx = topx + (long)(cos_angle*(double)width); |
2036 |
endy = topy + (long)(cos_angle*(double)height + sin_angle*(double)width); |
2036 |
endy = topy + (long)(cos_angle*(double)height + sin_angle*(double)width); |
2037 |
// check: corners of the rectangle must be inside |
2037 |
// check: corners of the rectangle must be inside |
Lines 2079-2088
bool CxImage::Crop(long left, long top, long right, long bottom, CxImage* iDst)
Link Here
|
2079 |
{ |
2079 |
{ |
2080 |
if (!pDib) return false; |
2080 |
if (!pDib) return false; |
2081 |
|
2081 |
|
2082 |
long startx = max(0L,min(left,head.biWidth)); |
2082 |
long startx = maximum(0L,minimum(left,head.biWidth)); |
2083 |
long endx = max(0L,min(right,head.biWidth)); |
2083 |
long endx = maximum(0L,minimum(right,head.biWidth)); |
2084 |
long starty = head.biHeight - max(0L,min(top,head.biHeight)); |
2084 |
long starty = head.biHeight - maximum(0L,minimum(top,head.biHeight)); |
2085 |
long endy = head.biHeight - max(0L,min(bottom,head.biHeight)); |
2085 |
long endy = head.biHeight - maximum(0L,minimum(bottom,head.biHeight)); |
2086 |
|
2086 |
|
2087 |
if (startx==endx || starty==endy) return false; |
2087 |
if (startx==endx || starty==endy) return false; |
2088 |
|
2088 |
|
Lines 2443-2450
bool CxImage::CircleTransform(int type,long rmax,float Koeff)
Link Here
|
2443 |
nx=x+(x%32)-16; |
2443 |
nx=x+(x%32)-16; |
2444 |
ny=y; |
2444 |
ny=y; |
2445 |
} |
2445 |
} |
2446 |
// nx=max(xmin,min(nx,xmax)); |
2446 |
// nx=maximum(xmin,minimum(nx,xmax)); |
2447 |
// ny=max(ymin,min(ny,ymax)); |
2447 |
// ny=maximum(ymin,minimum(ny,ymax)); |
2448 |
} |
2448 |
} |
2449 |
else { nx=-1;ny=-1;} |
2449 |
else { nx=-1;ny=-1;} |
2450 |
if (head.biClrUsed==0){ |
2450 |
if (head.biClrUsed==0){ |