Добрый день.
У меня есть
QByteArray принятого через последовательный порт изображения. Каждый элемент
QByteArray - это 1 пиксель (8бит), цвет от 0 до 255. Мне необходимо из этого, базового изображения сформировать 8 картинок. Алгоритм генерации такой:
Берем младший (нулевой, правый) бит первого пикселя исходного изображения, если он равен
0, то первый байт (пиксель) первого генерированного изображения должен быть черным (
'00000000',
'0x00',
0), если же младший бит первого пикселя исходного изображения равен
1, то первый байт(пиксель) первого генерированного изображения должен быть белым(
'11111111',
'0xFF',
255). Также поступаем с первым битом первого пикселя исходного изображения, но формируем первый пиксель уже второго изображения, и так для первый пикселей всех оставшихся. Операцию повторяем для всех пикселей исходного изображения, тем самым формируя 8 двуцветных изображений.
С помощью
Python 2.7, я алгоритм реализовал так:
def run(self):
self.start_gen.emit(len(self.source_img))
pb_val = 0
for img in self.nine:
self.nine[img] = bytearray(b'')
for byte_ in self.source_img:
pb_val += 1
self.generating.emit(pb_val)
bit_str = by2bi(byte_)
for i in range(8):
if bit_str[i] == '0':
self.nine['img_' + str(i)] += self.b0
else:
self.nine['img_' + str(i)] += self.b255
self.stop_gen.emit()
Но вот при переписывании всего этого дела на
C++, возникли глупые проблемы из за отсутствия опыта.
Например, как мне привести элемент
QByteArray к виду
'00001111', чтобы в цикле проходиться по битам и сравнивать их с нулем или единицей? Как мне сформировать байты
'0x00' и
'0xFF', для записи в
QByteArray каждой картинки?
Мне кажется, что надо все это дело побитовыми операциями решать, но как?
И еще, в
Python, я просто беру и создаю словарь с массивами, для записи в них значений, как подобное сделать в
C++? Я подумал, что следует формировать
QVector<QByteArray> generated_images;
Однако, компилятор ругается, что невозможно формировать вектор наполненный
QByteArray'ями.