本文整理汇总了C++中QColor::hsvSaturation方法的典型用法代码示例。如果您正苦于以下问题:C++ QColor::hsvSaturation方法的具体用法?C++ QColor::hsvSaturation怎么用?C++ QColor::hsvSaturation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QColor
的用法示例。
在下文中一共展示了QColor::hsvSaturation方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: drawPicker
void ColorWheel::drawPicker(const QColor& color)
{
QPainter painter(&mWheelPixmap);
painter.setRenderHint(QPainter::Antialiasing);
int ellipseSize = 9;
QPoint squareTopLeft = mSquareRect.topLeft();
QSize squareSize = mSquareRect.size();
qreal S = color.hsvSaturationF() * (squareSize.width()-1);
qreal V = (squareSize.height() - (color.valueF() * squareSize.height()-1));
QPen pen;
pen.setWidth(1);
if (color.hsvSaturation() > 30 || color.value() < 50)
{
pen.setColor(Qt::white);
}
painter.setPen(pen);
QTransform transform;
transform.translate(-ellipseSize/2,-ellipseSize/2);
transform.translate(squareTopLeft.x(),squareTopLeft.y()-1);
painter.setTransform(transform);
painter.drawEllipse(static_cast<int>(S), static_cast<int>(V), ellipseSize, ellipseSize);
}
示例2: ColorHistogram
void ColorHistogram(double* result, int d1, int d2, int d3, QString filename)
{
int i, j;
QImage image;
QRgb rgb;
QColor color;
for (i = 0; i < d1 * d2 * d3; i++)
result[i] = 0;
image.load(filename);
for (i = 0; i < image.width(); i++)
for (j = 0; j < image.height(); j++)
{
rgb = image.pixel(i, j);
color = QColor::fromRgba(rgb);
result[color.hsvHue() / (360 / d1) * d2 * d3 + color.hsvSaturation() / (256 / d2) * d3 + color.value() / (256 / d3)]++;
}
for (i = 1; i < d1 * d2 * d3; i++)
result[i] += result[i - 1];
}
示例3: setColor
void QgsColorBox::setColor( const QColor &color, const bool emitSignals )
{
//check if we need to redraw the box image
if ( mComponent == QgsColorWidget::Red && mCurrentColor.red() != color.red() )
{
mDirty = true;
}
else if ( mComponent == QgsColorWidget::Green && mCurrentColor.green() != color.green() )
{
mDirty = true;
}
else if ( mComponent == QgsColorWidget::Blue && mCurrentColor.blue() != color.blue() )
{
mDirty = true;
}
else if ( mComponent == QgsColorWidget::Hue && color.hsvHue() >= 0 && hue() != color.hsvHue() )
{
mDirty = true;
}
else if ( mComponent == QgsColorWidget::Saturation && mCurrentColor.hsvSaturation() != color.hsvSaturation() )
{
mDirty = true;
}
else if ( mComponent == QgsColorWidget::Value && mCurrentColor.value() != color.value() )
{
mDirty = true;
}
QgsColorWidget::setColor( color, emitSignals );
}
示例4: setColorFromPos
void QgsColorWheel::setColorFromPos( const QPointF pos )
{
QPointF center = QPointF( width() / 2.0, height() / 2.0 );
//line from center to mouse position
QLineF line = QLineF( center.x(), center.y(), pos.x(), pos.y() );
QColor newColor = QColor();
int h, s, l, alpha;
mCurrentColor.getHsl( &h, &s, &l, &alpha );
//override hue with explicit hue, so we don't get -1 values from QColor for hue
h = hue();
if ( mClickedPart == QgsColorWheel::Triangle )
{
//adapted from equations at https://github.com/timjb/colortriangle/blob/master/colortriangle.js by Tim Baumann
//position of event relative to triangle center
double x = pos.x() - center.x();
double y = pos.y() - center.y();
double eventAngleRadians = line.angle() * M_PI / 180.0;
double hueRadians = h * M_PI / 180.0;
double rad0 = fmod( eventAngleRadians + 2.0 * M_PI - hueRadians, 2.0 * M_PI );
double rad1 = fmod( rad0, (( 2.0 / 3.0 ) * M_PI ) ) - ( M_PI / 3.0 );
double length = mWheelImage->width() / 2.0;
double triangleLength = length - mWheelThickness - 1;
double a = 0.5 * triangleLength;
double b = tan( rad1 ) * a;
double r = sqrt( x * x + y * y );
double maxR = sqrt( a * a + b * b );
if ( r > maxR )
{
double dx = tan( rad1 ) * r;
double rad2 = atan( dx / maxR );
rad2 = qMin( rad2, M_PI / 3.0 );
rad2 = qMax( rad2, -M_PI / 3.0 );
eventAngleRadians += rad2 - rad1;
rad0 = fmod( eventAngleRadians + 2.0 * M_PI - hueRadians, 2.0 * M_PI );
rad1 = fmod( rad0, (( 2.0 / 3.0 ) * M_PI ) ) - ( M_PI / 3.0 );
b = tan( rad1 ) * a;
r = sqrt( a * a + b * b );
}
double triangleSideLength = sqrt( 3.0 ) * triangleLength;
double newL = (( -sin( rad0 ) * r ) / triangleSideLength ) + 0.5;
double widthShare = 1.0 - ( fabs( newL - 0.5 ) * 2.0 );
double newS = ((( cos( rad0 ) * r ) + ( triangleLength / 2.0 ) ) / ( 1.5 * triangleLength ) ) / widthShare;
s = qMin( qRound( qMax( 0.0, newS ) * 255.0 ), 255 );
l = qMin( qRound( qMax( 0.0, newL ) * 255.0 ), 255 );
newColor = QColor::fromHsl( h, s, l );
//explicitly set the hue again, so that it's exact
newColor.setHsv( h, newColor.hsvSaturation(), newColor.value(), alpha );
}
else if ( mClickedPart == QgsColorWheel::Wheel )
{
//use hue angle
s = mCurrentColor.hsvSaturation();
int v = mCurrentColor.value();
int newHue = line.angle();
newColor = QColor::fromHsv( newHue, s, v, alpha );
//hue has changed, need to redraw triangle
mTriangleDirty = true;
}
if ( newColor.isValid() && newColor != mCurrentColor )
{
//color has changed
mCurrentColor = QColor( newColor );
if ( mCurrentColor.hue() >= 0 )
{
//color has a valid hue, so update the QgsColorWidget's explicit hue
mExplicitHue = mCurrentColor.hue();
}
update();
emit colorChanged( mCurrentColor );
}
}
示例5: colorToString
QString colorToString(const QColor &color, ColorFormat format)
{
QString ret;
QString prefix;
QString colorComponents;
if (format == ColorFormat::QCssRgbUCharFormat) {
prefix = QLatin1String("rgb(");
colorComponents = QString::number(color.red()) + QLatin1String(", ")
+ QString::number(color.green()) + QLatin1String(", ")
+ QString::number(color.blue());
qreal alpha = color.alphaF();
if (alpha < 1.0) {
prefix.insert(3, QLatin1Char('a'));
colorComponents += QLatin1String(", ") + colorDoubleToQString(color.alphaF());
}
}
if (format == ColorFormat::QCssRgbPercentFormat) {
int rP = qRound(color.redF() * 100);
int gP = qRound(color.greenF() * 100);
int bP = qRound(color.blueF() * 100);
prefix = QLatin1String("rgb(");
colorComponents = QString::number(rP) + QChar::fromLatin1('%') + QLatin1String(", ")
+ QString::number(gP) + QChar::fromLatin1('%') + QLatin1String(", ")
+ QString::number(bP) + QChar::fromLatin1('%');
qreal alpha = color.alphaF();
if (alpha < 1.0) {
prefix.insert(3, QLatin1Char('a'));
colorComponents += QLatin1String(", ") + colorDoubleToQString(alpha);
}
}
else if (format == ColorFormat::QssHsvFormat) {
prefix = QLatin1String("hsv(");
colorComponents = QString::number(color.hsvHue()) + QLatin1String(", ")
+ QString::number(color.hsvSaturation()) + QLatin1String(", ")
+ QString::number(color.value());
int aP = qRound(color.alphaF() * 100);
if (aP < 100) {
prefix.insert(3, QLatin1Char('a'));
colorComponents += QLatin1String(", ") + colorDoubleToQString(aP);
}
}
else if (format == ColorFormat::CssHslFormat) {
prefix = QLatin1String("hsl(");
int sP = qRound(color.hslSaturationF() * 100);
int lP = qRound(color.lightnessF() * 100);
colorComponents = QString::number(color.hslHue()) + QLatin1String(", ")
+ QString::number(sP) + QChar::fromLatin1('%') + QLatin1String(", ")
+ QString::number(lP) + QChar::fromLatin1('%');
qreal alpha = color.alphaF();
if (alpha < 1.0) {
prefix.insert(3, QLatin1Char('a'));
colorComponents += QLatin1String(", ") + colorDoubleToQString(color.alphaF());
}
}
else if (format == ColorFormat::QmlRgbaFormat) {
prefix = QLatin1String("Qt.rgba(");
colorComponents = colorDoubleToQString(color.redF()) + QLatin1String(", ")
+ colorDoubleToQString(color.greenF()) + QLatin1String(", ")
+ colorDoubleToQString(color.blueF()) + QLatin1String(", ")
+ colorDoubleToQString(color.alphaF());
}
else if (format == ColorFormat::QmlHslaFormat) {
prefix = QLatin1String("Qt.hsla(");
colorComponents = colorDoubleToQString(color.hueF()) + QLatin1String(", ")
+ colorDoubleToQString(color.saturationF()) + QLatin1String(", ")
+ colorDoubleToQString(color.lightnessF()) + QLatin1String(", ")
+ colorDoubleToQString(color.alphaF());
}
else if (format == ColorFormat::GlslFormat) {
prefix = QLatin1String("vec");
colorComponents = colorDoubleToQString(color.redF()) + QLatin1String(", ")
+ colorDoubleToQString(color.greenF()) + QLatin1String(", ")
+ colorDoubleToQString(color.blueF());
qreal alpha = color.alphaF();
if (alpha < 1.0) {
prefix.append(QLatin1Char('4'));
colorComponents += QLatin1String(", ") + colorDoubleToQString(color.alphaF());
} else {
prefix.append(QLatin1Char('3'));
}
prefix.append(QLatin1Char('('));
}
else if (format == ColorFormat::HexFormat) {
prefix = QLatin1String("#");
int alpha = color.alpha();
//.........这里部分代码省略.........
示例6: setColor
void ColorInspector::setColor(QColor newColor)
{
// this is a UI update function, never emit any signals
// grab the color from color manager, and then update itself, that's it.
// compare under the same color spec
newColor = (isRgbColors) ? newColor.toRgb() : newColor.toHsv();
if (newColor == mCurrentColor)
{
return;
}
if(isRgbColors)
{
QSignalBlocker b1(ui->red_slider);
QSignalBlocker b2(ui->green_slider);
QSignalBlocker b3(ui->blue_slider);
QSignalBlocker b4(ui->alpha_slider);
ui->red_slider->setRgb(newColor);
ui->green_slider->setRgb(newColor);
ui->blue_slider->setRgb(newColor);
ui->alpha_slider->setRgb(newColor);
QSignalBlocker b5(ui->RedspinBox);
QSignalBlocker b6(ui->GreenspinBox);
QSignalBlocker b7(ui->BluespinBox);
QSignalBlocker b8(ui->AlphaspinBox);
ui->RedspinBox->setValue(newColor.red());
ui->GreenspinBox->setValue(newColor.green());
ui->BluespinBox->setValue(newColor.blue());
ui->AlphaspinBox->setValue(newColor.alpha());
}
else
{
QSignalBlocker b1(ui->red_slider);
QSignalBlocker b2(ui->green_slider);
QSignalBlocker b3(ui->blue_slider);
QSignalBlocker b4(ui->alpha_slider);
ui->red_slider->setHsv(newColor);
ui->green_slider->setHsv(newColor);
ui->blue_slider->setHsv(newColor);
ui->alpha_slider->setHsv(newColor);
QSignalBlocker b5(ui->RedspinBox);
QSignalBlocker b6(ui->GreenspinBox);
QSignalBlocker b7(ui->BluespinBox);
QSignalBlocker b8(ui->AlphaspinBox);
ui->RedspinBox->setValue(newColor.hsvHue());
ui->GreenspinBox->setValue(qRound(newColor.hsvSaturation() / 2.55));
ui->BluespinBox->setValue(qRound(newColor.value() / 2.55));
ui->AlphaspinBox->setValue(qRound(newColor.alpha() / 2.55));
}
mCurrentColor = newColor;
QPalette p1 = ui->colorWrapper->palette(), p2 = ui->color->palette();
p1.setBrush(QPalette::Background, QBrush(QImage(":/background/checkerboard.png")));
p2.setColor(QPalette::Background, mCurrentColor);
ui->colorWrapper->setPalette(p1);
ui->color->setPalette(p2);
update();
}
示例7: Colors
ColorVector MoodbarRenderer::Colors(const QByteArray& data, MoodbarStyle style,
const QPalette& palette) {
const int samples = data.size() / 3;
// Set some parameters based on the moodbar style
StyleProperties properties;
switch (style) {
case Style_Angry:
properties = StyleProperties(samples / 360 * 9, 45, -45, 200, 100);
break;
case Style_Frozen:
properties = StyleProperties(samples / 360 * 1, 140, 160, 50, 100);
break;
case Style_Happy:
properties = StyleProperties(samples / 360 * 2, 0, 359, 150, 250);
break;
case Style_Normal:
properties = StyleProperties(samples / 360 * 3, 0, 359, 100, 100);
break;
case Style_SystemPalette:
default: {
const QColor highlight_color(
palette.color(QPalette::Active, QPalette::Highlight));
properties.threshold_ = samples / 360 * 3;
properties.range_start_ = (highlight_color.hsvHue() - 20 + 360) % 360;
properties.range_delta_ = 20;
properties.sat_ = highlight_color.hsvSaturation();
properties.val_ = highlight_color.value() / 2;
}
}
const unsigned char* data_p =
reinterpret_cast<const unsigned char*>(data.constData());
int hue_distribution[360];
int total = 0;
memset(hue_distribution, 0, arraysize(hue_distribution));
ColorVector colors;
// Read the colors, keeping track of some histograms
for (int i = 0; i < samples; ++i) {
QColor color;
color.setRed(int(*data_p++));
color.setGreen(int(*data_p++));
color.setBlue(int(*data_p++));
colors << color;
const int hue = qMax(0, color.hue());
if (hue_distribution[hue]++ == properties.threshold_) {
total++;
}
}
total = qMax(total, 1);
// Remap the hue values to be between rangeStart and
// rangeStart + rangeDelta. Every time we see an input hue
// above the threshold, increment the output hue by
// (1/total) * rangeDelta.
for (int i = 0, n = 0; i < 360; i++) {
hue_distribution[i] =
((hue_distribution[i] > properties.threshold_ ? n++ : n) *
properties.range_delta_ / total +
properties.range_start_) %
360;
}
// Now huedist is a hue mapper: huedist[h] is the new hue value
// for a bar with hue h
for (ColorVector::iterator it = colors.begin(); it != colors.end(); ++it) {
const int hue = qMax(0, it->hue());
*it = QColor::fromHsv(
qBound(0, hue_distribution[hue], 359),
qBound(0, it->saturation() * properties.sat_ / 100, 255),
qBound(0, it->value() * properties.val_ / 100, 255));
}
return colors;
}