Кроме того, у меня проблемы с выводом отдельных битов. В настоящее время я использую это l oop, чтобы изменить мои пиксели в растровом изображении:
В основном здесь вы пытаетесь скопировать пиксели из одного изображения в другое. XBM - это просто очень простой c моно формат, поэтому просто вопрос установки пикселя на нужный цвет (передний план) или оставления его как есть (фон).
Это почти то, что у вас есть. Обратите внимание, что этот dr aws находится в верхнем левом углу (0,0) изображения и предполагает, что конечное изображение достаточно велико. Вы должны добавить проверку границ, чтобы безопасно обрезать рисунок.
void draw_A(BitmapImg &picture, unsigned short r, unsigned short g, unsigned short b)
{
for (int y = 0; y < A_height; ++y)
{
for (int x = 0; x < A_width; ++x)
{
unsigned bytes_per_row = (A_width + 7) / 8; // divide rounding up
unsigned row_byte = x / 8; // 8 bits per byte
unsigned row_bit = x % 8;
unsigned char src_byte = A_bits[y * bytes_per_row + row_byte]; // row by row, left to right, top to bottom
bool src_bit = ((src_byte >> row_bit) & 0x1) != 0; // least signifcant bit (1) is first
if (src_bit)
{
picture.setPixel(x, y, r, g, b);
}
}
}
}
unsigned short int red[1080][1080]; //1080X1080 Pixels
unsigned short int green[1080][1080];
unsigned short int blue[1080][1080];
Обратите внимание, что это довольно необычный способ хранения данных изображения, обычно каждый пиксель сохраняется вместе в одном массиве двумерные массивы также не работают с динамическим размером c (вы не можете p = new unsigned short[width][height]; p[50][40] = 10;
).
Например, 24-битный RGB 8 бит на секунду может быть сохранен как unsigned char pixels[width * height * 3]; pixels[50 * 3 + 40 * width * 3 + 1] = 10; /*set green at (50,40)*/
. Вы увидите это при работе с данными изображений во многих библиотеках и форматах файлов. Хотя следует помнить, что некоторые форматы изображений особенно начинаются снизу, а не сверху.
Но теперь я начал импортировать буквы через xbm-файл в XCode, которые затем используют различные циклы для изменения моих значений RGB. в массиве. Но это решение очень сложное.
Делать многие вещи напрямую с изображениями, однако, как правило, становится довольно сложно, особенно после того, как вы начнете учитывать прозрачность / смешивание, преобразует как масштабирование, вращение, все различные форматы изображений в иметь дело с (индексированный цвет, 16,24,32 и т. д. c. битовые целочисленные пиксели, форматы снизу вверх, а не сверху вниз и т. д. c.).
Существует много графики библиотеки с аппаратным ускорением и программным обеспечением, спецификация платформы c (например, все Windows GDI, DirectWrite, Direct2D, Direct3D и др. c. вещи) или портативные. Многие из этих библиотек будут поддерживать ввод и вывод изображений в этом стиле, используя различные форматы для указанных c пикселей и множество решений для преобразования одного формата в другой при необходимости.