#c #colors #hex #graphicsmagick
#c #Цвет #шестнадцатеричная #graphicsmagick
Вопрос:
Как я могу преобразовать целое число в диапазоне от 0 до 255 в строку, содержащую ровно два символа, сохраняя шестнадцатеричное представление числа?
Пример
ввод: 180 вывод: «B4»
Моя цель — установить оттенки серого в Graphicsmagick. Итак, взяв тот же пример, я хочу получить следующий конечный результат:
«#B4B4B4»
чтобы я мог использовать его для присвоения цвета: Color(«#B4B4B4»);
Должно быть легко, не так ли?
Ответ №1:
Вам не нужно. Это более простой способ:
ColorRGB(red/255., green/255., blue/255.)
Комментарии:
1. У меня есть еще один вопрос, как я могу установить прозрачность этого цвета?
2. @Alp: пожалуйста, обратитесь к документации используемой вами библиотеки.
3. Я не понимаю, как использовать класс ColorRGB и устанавливать для альфа-канала пользовательское значение.
4. Я пробовал:
Color color = ColorRGB(R, G, B); color.alpha(.5);
но, похоже, это не работает, по-прежнему нет непрозрачности.5. @Alp: вот как это должно работать. Если этого не происходит, это означает, что проблема в чем-то другом (вероятно, в том месте, где вы используете цвет).
Ответ №2:
Вы можете использовать встроенные функции форматирования части IOStreams стандартной библиотеки C , например:
#include <string>
#include <sstream>
#include <iostream>
#include <ios>
#include <iomanip>
std::string getHexCode(unsigned char c) {
// Not necessarily the most efficient approach,
// creating a new stringstream each time.
// It'll do, though.
std::stringstream ss;
// Set stream modes
ss << std::uppercase << std::setw(2) << std::setfill('0') << std::hex;
// Stream in the character's ASCII code
// (using ` ` for promotion to `int`)
ss << c;
// Return resultant string content
return ss.str();
}
int main() {
// Output: "B4, 04"
std::cout << getHexCode(180) << ", " << getHexCode(4);
}
Ответ №3:
Используя printf
с %x
помощью спецификатора формата. В качестве альтернативы, strtol
можно указать базовое значение как 16.
#include<cstdio>
int main()
{
int a = 180;
printf("%xn", a);
return 0;
}
Комментарии:
1. Если вы собираетесь настаивать на использовании устаревших функций C, включайте
cstdio
неstdio.h
.2. @Tomalak Geret’kal: Хотя я согласен с комментарием cstdio (и я тоже внес изменения) Я не думаю, что нет ничего плохого в использовании устаревших функций C в C .
3. Я тоже этого не делаю (хотя я думаю, что есть разница между его использованием и рекомендацией . : P)
4. @Tomalak Geret’kal: Что ж, если использовать неплохо, рекомендация тоже не может быть плохой.
5. Вряд ли. То, что опытный программист на C знает достаточно о том, что он делает, чтобы безопасно использовать отдельные фрагменты устаревшего C здесь и там, не означает, что разумно поощрять новичка делать это. Немного похоже на то, как я использую cplusplus.com в качестве ссылки, потому что я достаточно опытен, чтобы обнаруживать ошибки; даже через миллион лет я не стал бы рекомендовать это как ресурс всем, кто им не является.