Obtener color intermedio de un degradado

Obtener color intermedio de un degradado


Digamos que tengo un degradado de línea como se muestra:


QLinearGradient linearGrad(QPointF(0, 0), QPointF(0, 100));
linearGrad.setColorAt(1, Qt::red);
linearGrad.setColorAt(0.5, Qt::yellow);
linearGrad.setColorAt(0, Qt::green);

¿Cómo obtener el color del punto QPointF(0, 28.5) en este degradado?


De hecho, quiero tener este tipo de distribución de color para poder elegir colores intermedios. No me importa si se hace usando QLinearGradient o algo más.


Respuestas:


Solo hay una forma de hacerlo:


Hay un miembro estático en la clase QPixmap

QPixmap QPixmap::grabWindow( WId window, int x = 0, int y = 0, int width = -1, int height = -1 )


1) dibuja tu degradado en tu widget;


2) captura la superficie de tu widget en un mapa de píxeles usando esa función; WId se puede recibir desde QWidget::effectiveWinId ();


3) convertir token pixmap en QImage (hay un constructor disponible);


4) int QImage::pixelIndex( int x, int y ) devuelve el índice de píxeles en (x, y) en QImage tabla de colores. En su caso, debe calcular el valor porcentual a partir de la altura del widget (pWidget->height() / 100 * 28.5 ).


5) QRgb QImage::color( int i ) devuelve el color de la tabla de colores en el índice i.


Entonces, el Color devuelto es el color que estabas buscando.