QImage AdjustContrast(QImage Img, int iContrastValue)
{
int pixels = Img.width() * Img.height();
unsigned int *data = (unsigned int *)Img.bits();
int red, green, blue, nRed, nGreen, nBlue;
if (iContrastValue > 0 && iContrastValue < 100)
{
float param = 1 / (1 - iContrastValue / 100.0) - 1;
for (int i = 0; i < pixels; ++i)
{
nRed = qRed(data[i]);
nGreen = qGreen(data[i]);
nBlue = qBlue(data[i]);
red = nRed + (nRed - 127) * param;
red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
green = nGreen + (nGreen - 127) * param;
green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
blue = nBlue + (nBlue - 127) * param;
blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue;
data[i] = qRgba(red, green, blue, qAlpha(data[i]));
}
}
else
{
for (int i = 0; i < pixels; ++i)
{
nRed = qRed(data[i]);
nGreen = qGreen(data[i]);
nBlue = qBlue(data[i]);
red = nRed + (nRed - 127) * iContrastValue / 100.0;
red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
green = nGreen + (nGreen - 127) * iContrastValue / 100.0;
green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
blue = nBlue + (nBlue - 127) * iContrastValue / 100.0;
blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue;
data[i] = qRgba(red, green, blue, qAlpha(data[i]));
}
}
return Img;
}
[开源]Qt图片调整之对比度调节
于 2017-01-22 17:05:17 首次发布