Создание 2D-массива для вывода файла pmm Переполнение стека

Инструкции, которые мне дали, были очень расплывчаты, и я совершенно заблудился в том, что я должен делать. Нужна помощь. Я постараюсь объяснить, и, надеюсь, кто-то может мне помочь.

Мне нужно сгенерировать ppm-файл заданной ширины и высоты, когда вы устанавливаете цвет пикселя (i, j) со значением col, как в:

float col = float (((i & 0x08) == 0) ^ ((j & 0x08) == 0));

Вы можете использовать следующую структуру для цвета RGB:

struct RGB {
float r;
float g;
float b;
};

Каждый элемент в массиве находится в диапазоне [0.0, 1.0] и должен быть преобразован в [0, 255] перед записью в файл.

Это примерно столько информации, сколько у меня есть. Я действительно просто потерял то, что он на самом деле хочет, чтобы я сделал. Это может быть достаточно информации для кого-то более опытного, но не для меня. Может кто-нибудь уточнить это. Кроме того, что, черт возьми, делает этот первый фрагмент формулы / кода?

Я до сих пор не понимаю, что такое i и j, или для чего нужна формула, или как сгенерировать значения для записи в 2d массив RGB!?!?

0

Решение

PPM — это действительно простой растровый формат, вы в основном описали его в своем вопросе. Чтобы увидеть более подробную информацию, Google или проверить http://netpbm.sourceforge.net/doc/ppm.html .

Чтобы преобразовать диапазон [0,0 .. 1,0] в [0 … 255], вам просто нужно выполнить умножение на 255,0 для каждого компонента пикселя.

Подводя итог: записать заголовок ppm в файл, перебрать все пиксели, умножить его компоненты на 255, преобразовать в целое, записать в файл как текст. Все значения в файле разделены пробелом.

Первый фрагмент кода расскажет вам, как создать картинку. Это в основном означает, что цвет — белый, если четвертый бит справа отличается по координатам i и j, и черный, если они одинаковы. Это должно генерировать шахматный узор с 16 на 16 квадратов.

1

Другие решения

В первой формуле вы получите не значения в диапазоне из [0 1], но только 0s а также 1sпотому что оператор == возвращает либо true или же false (0 или 1 в битовом представлении). Операция XOR (^) над 0 и / или 1 вернет также 0 или 1.

Вот таблица истинности для операции XOR

-----------------
| a | b | a ^ b |
-----------------
| 0 | 0 |   0   |
-----------------
| 0 | 1 |   1   |
-----------------
| 1 | 0 |   1   |
-----------------
| 1 | 1 |   0   |
-----------------

Преобразование из диапазона [0 1] в [0 255] — это просто умножение значения на 255.

void convertTo_255( struct RGB * array, size_t count {
for ( size_t i = 0; i < count; i++ ) {
array[ i ].r *= 255;
array[ i ].g *= 255;
array[ i ].b *= 255;
}
0

По вопросам рекламы [email protected]