У меня есть класс под названием Image в C++, где у меня есть ширина, высота и длинный вектор, который хранит все значения пикселей таким образом, что он итерации через первый столбец, затем он перемещается на одну строку вниз, итерации через второй столбец и т. д. (0 ist black, 255 - белый)Создание шахматной доски с переменным квадратным размером
Теперь я написал функцию void chess(), которая преобразует значения пикселей таким образом, что это имеет базовый шахматный паттерн на нем, когда вы выходите из него .
Следующей идеей является создание шахматной доски различного размера, например. ширина 8, высота 8, и каждый квадрат шахматной доски 2х2 пиксели вместо 1x1
Теперь, если я пытаюсь реализовать его, моя «идея» является использование 2 счетчиков, один, чтобы отслеживать, что она изменяет от белого до черного не после каждого пикселя, а после нового размера пикселей. Кроме того, вам нужно будет иметь второй счетчик для отслеживания, после того, сколько строк вы должны инвертировать, поэтому вы начинаете с черного, а не белого.
Но я не могу понять это, я получаю так много утверждений If, а для циклов while и while они всегда появляются беспорядочно. Должен быть значительно более простой способ. У кого-нибудь есть идеи?
class Image
{
public:
typedef uint16_t PixelType;
private:
int width_;
int height_;
std::vector<PixelType> data_;
public:
// Standardkonstruktor: initialisiere Bild mit Groesse (0,0)
Image()
: width_(0)
, height_(0)
{}
Image(unsigned int width, unsigned int height)
: width_(width)
, height_(height)
{
int size = width * height;
for(int j=0; j < height; j++)
{
for(int i=0; i < width; i++)
{
data_.push_back(0);
}
}
}
void chess() // change an image to chess board pattern
{
data_.clear();
int width = (*this).width();
int height = (*this).height();
for(int w=0; w < width; w++)
{
for(int h=1; h <= height; h++)
{
/*std::cout << "P=("+ std::to_string(w) + "," + std::to_string(h) + ")" << std::endl;
std::cout << std::to_string(h%2) <<std::endl;
for testing purposes only */
if(w%2==0)
{
if(!(h%2==0))
{
data_.push_back(255);
}
else
{
data_.push_back(0);
}
}
else
{
if(!(h%2==0))
{
data_.push_back(0);
} else
{
data_.push_back(255);
}
}
}
}
}
};
не в теме: ваш конструктор может быть только одной строкой data_.res Изя (ширина * высота, 0); или даже лучше Изображение (без знаковой ширины, неподписанная высота) : ширина_ (ширина) , высота_ (высота), данные_ (ширина * высота, 0) { –