как задать цвет числу в С#?

134
26 декабря 2019, 21:20

Есть код, который переводит все в двоичный код. Теперь мне нужно задать числу 1 - черный цвет, а 0 - белый цвет. Задав это, я хочу получать картинку с пикселями. Я пишу шифратор и идея такая: человек вводит свое предложение, нажимает кнопку "зашифровать", появляется картинка с черно-белыми пикселями. Как все это сделать?

Answer 1

Как задать цвет числу?

Формальный ответ на этот вопрос будет следующим:

var dict = new Dictionary<int, string>();
dict.Add(1, "черный");
dict.Add(0, "белый");

Здесь мы задали числу 1 черный цвет, а числу 0 - белый. Логично?

Ладно, ладно, реализуем то, о чем речь в комментариях.

var random = new Random();
var number = random.Next();
var result = Convert.ToString(number, 2);
result = result.Replace('1', 'b').Replace('0', 'r');
Console.WriteLine(result);

Сгенерировали случайное число, преобразовали его в двоичный вид, заменили единицы и нули на определенные символы. Число зашифровано. Правильно?

О, оказывается картинка нужна.

Используем System.Drawing.Bitmap.

var bitmap = new Bitmap(32, 1);
for (int i = 0; i < 32; i++)
{
    if ((number & (1 << i)) != 0)
        bitmap.SetPixel(i, 0, Color.White);
    else
        bitmap.SetPixel(i, 0, Color.Black);
}
bitmap.Save("pic.bmp", ImageFormat.Bmp);

Для 32-битного числа создаем изображение размером 32x1.

В цикле определяем битовыми операциями значение каждого бита и задаем цвет соответствующему пикселю.

Предупреждение: метод SetPixel работает очень медленно, поэтому его не стоит использовать при работе с большими изображениями. Вместо него используйте LockBits (поиск в помощь).

Answer 2

Откомментировать я пока не могу.

Берешь двоичный код и последовательно выделяешь каждую 1 или 0 (можно сделать при помощи логических операций и сдвигов) , потом полученный результат сравниваешь 1 или 0 и выводишь цветной пиксель и т.д. Метод вывод цвета зависит от типа приложения.