Растровое изображение представляет собой массив бит. Как это реализовано в C?
Что такое растровое изображение в C?
Ответ 1
Я предполагаю, что вы спрашиваете, как реализовать битовую карту (или бит-массив) в C. Удивительно, что запись Bit_array в wikipedia описывает концепцию, но на самом деле не показывает, как реализовать фундаментальные операции, поэтому здесь идет речь.
Короче говоря, создайте массив вашего любимого неподписанного типа и сделайте правильную арифметику, чтобы решить, как установить/очистить бит.
#include <limits.h> /* for CHAR_BIT */
#include <stdint.h> /* for uint32_t */
typedef uint32_t word_t;
enum { BITS_PER_WORD = sizeof(word_t) * CHAR_BIT };
#define WORD_OFFSET(b) ((b) / BITS_PER_WORD)
#define BIT_OFFSET(b) ((b) % BITS_PER_WORD)
void set_bit(word_t *words, int n) {
words[WORD_OFFSET(n)] |= (1 << BIT_OFFSET(n));
}
void clear_bit(word_t *words, int n) {
words[WORD_OFFSET(n)] &= ~(1 << BIT_OFFSET(n));
}
int get_bit(word_t *words, int n) {
word_t bit = words[WORD_OFFSET(n)] & (1 << BIT_OFFSET(n));
return bit != 0;
}