Инструкции, которые мне дали, были очень расплывчаты, и я совершенно заблудился в том, что я должен делать. Нужна помощь. Я постараюсь объяснить, и, надеюсь, кто-то может мне помочь.
Мне нужно сгенерировать 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!?!?
PPM — это действительно простой растровый формат, вы в основном описали его в своем вопросе. Чтобы увидеть более подробную информацию, Google или проверить http://netpbm.sourceforge.net/doc/ppm.html .
Чтобы преобразовать диапазон [0,0 .. 1,0] в [0 … 255], вам просто нужно выполнить умножение на 255,0 для каждого компонента пикселя.
Подводя итог: записать заголовок ppm в файл, перебрать все пиксели, умножить его компоненты на 255, преобразовать в целое, записать в файл как текст. Все значения в файле разделены пробелом.
Первый фрагмент кода расскажет вам, как создать картинку. Это в основном означает, что цвет — белый, если четвертый бит справа отличается по координатам i и j, и черный, если они одинаковы. Это должно генерировать шахматный узор с 16 на 16 квадратов.
В первой формуле вы получите не значения в диапазоне из [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;
}