2016-03-11 2 views
1

Я пытаюсь написать функцию, которая считывает изображения PPM, и функция должна возвращать содержимое.C++ работает с изображениями PPM

PPM изображение имеет следующий формат текст:

P3 
numOfRows numOfColumns 
maxColor 
numOfRows-by-numOfColumns of RGB colors 

Поскольку формат текст имеет смесь типов переменных, есть ли способ хранить все это в массиве? Я помнил, что C++ не поддерживает массивы с разными типами. Если нет, то я собираюсь определить класс для хранения содержимого PPM.

+0

Что вы подразумеваете под * «у него будет смесь типов» *? Это не так. Если заголовок P3, все будет ASCII, если заголовок P6, он будет двоичным. И все это будет целым числом. –

ответ

1

C++ не поддерживает массивы разных типов.

Исправить.


Вы могли:

  1. Определение класса, как вы говорите, как это: C++ Push Multiple Types onto Vector или это: Creating a vector that holds two different data types or classes или даже это: Vector that can have 3 different data types C++.
  2. Имейте общий C-подобный массив (или еще лучше, std::vector) с void*.
0

C++ не является Javascript. Число столбцов/количество строк должно быть целым числом. Максимальное значение цвета может быть целым или поплавком в зависимости от деталей формата, равно как и значения rgb.

Итак, сначала вы читаете размеры изображения. Затем вы создаете буфер для хранения изображения. Обычно 32 бит rgba - это то, что вы хотите, поэтому либо выделяйте width * height * 4 с помощью malloc(), либо используйте std :: vector и изменяйте размер. Затем вы просматриваете данные, считывая значения и помещая их в массив . Затем вы создаете объект «Изображение» с целыми числами ширины и высоты и буфер пикселов из 32-разрядных rgbas (или какой-либо предпочтительный формат пикселей).

+0

Это не будет RGBA, потому что PPM не поддерживает альфа. –

Смежные вопросы