Используйте QColorDialog для возврата значения RGB565

#c #qt #rgb #qcolordialog

#c #qt #rgb — цвет #qcolordialog #rgb

Вопрос:

Я хочу вернуть значение RGB565, когда пользователь выбирает цвет из QColorDialog. Я попытался использовать метод преобразования, описанный на веб-сайте RGB565 Color Picker, но выходные данные моего кода не представляют то же значение в шестнадцатеричном формате:

 QColor color = QColorDialog::getColor();

uint8_t red = color.red();
uint8_t green = color.green();
uint8_t blue = color.blue();
qDebug("%d red   %d green   %d blue", red, green, blue);

uint16_t Rgb565 = 0;
Rgb565 = (((red amp; 0xf8)<<8)   ((green amp; 0xfc)<<3)   (blue>>3));
qDebug() << Rgb565;
  

Например, если значения RGB были (255, 0, 0) , то результат будет 63488 . Я ожидал, что результат будет таким 0xF800 . Что я делаю не так?

Комментарии:

1. вместо этого используйте uint8_t для красного / зеленого / синего и uint16_t для Rbg565 [как указано в размещенной вами ссылке], чтобы сохранить данные без знака и в пределах диапазона.

2. @MikeVine — Спасибо за это, к сожалению, я все еще не получаю ожидаемого результата.

3. Вы получите абсолютно правильный результат. 0xF800 в шестнадцатеричном формате это то же числовое значение, что и 63488 в десятичном. То, как вы его выводите (и кажется, что qDebug по умолчанию выводит десятичное число, что является разумным значением по умолчанию), не меняет этого факта.

4. @MikeVine — Я не знал, что qDebug делает это по умолчанию. Вы правы, использование qDebug() << hex << Rgb565; возвращает шестнадцатеричное значение. Если вы можете опубликовать ответ, я приму его.