Я пишу класс для печати растровых изображений на портативный принтер bluetooth на Android через Mono для Android. Мой класс используется для получения данных пикселя из потока, поэтому его можно отправить на принтер в правильном формате. Сейчас класс прост, он просто считывает высоту, ширину и бит на пиксель.Алгоритм вертикального переворачивания растрового изображения в байтовом массиве
Используя смещение, он считывает и возвращает данные пикселя на принтер. Прямо сейчас я просто работаю с 1 бит на пиксель черно-белых изображений. Растровые изображения, с которыми я работаю, находятся в формате Windows.
Здесь исходное изображение:
Вот результат печати, первое изображение без каких-либо преобразований. И второй из них является результатом изменения BitArray со следующим кодом:
BitArray bits = new BitArray(returnBytes);
BitArray flippedBits = new BitArray(bits);
for (int i = 0, j = bits.Length - 1; i < bits.Length; i++, j--)
{
flippedBits[i] = bits[j];
}
Мой вопрос:
Как перевернуть изображение по вертикали, когда я работаю с массивом байтов. У меня возникли проблемы с поиском алгоритма для этого, все примеры, похоже, предполагают использование установленных графических библиотек, которые я не могу использовать.
Edit:
Мой Bitmap сохраняется в 1 одномерный массив, с первых строк байтов, затем второй, третий и т.д.
Вы ищете алгоритм обмена числами в матрице, пиксели изображения, поэтому изображение повернуто? Что вы подразумеваете под 'flip' – Adrian
@Adrian Да, мне нужно изменить массив, чтобы изображение было напечатано в правильной ориентации. Я ищу алгоритм, который будет выполнять команду «flip vertical» в Photoshop или других программах рисования. – dmck
Является ли формат таким, чтобы бит-бит содержал биты 'width * height * bits_per_pixel'? И если да, то он организован в форме '[first_row | second_row | ...]'? –