Предположим, что наше растровое изображение имеет высоту M и ширину N. В этой лабораторной работе мы всегда будем предполагать, что ширина N кратна 4, что упрощает разметку байтов в файле.Для этого изображения массив пикселей хранит ровно 3 x N x M байтов следующим образом:
Каждая группа из 3 байтов представляет один пиксель, где байты хранят значения синего, зеленого и красного цветов.пикселя в указанном порядке.
Пиксели сгруппированы по строкам.Например, первые 3 x N байтов в массиве пикселей представляют пиксели в самой верхней строке изображения.
pixel_array_offset
- это то место, где начинается массив пикселей.
Структурный пиксель задается следующим образом:
struct pixel {
unsigned char blue;
unsigned char green;
unsigned char red;
};
И вот требование для реализации функции:
/*
* Read in pixel array by following these instructions:
*
* 1. First, allocate space for m "struct pixel *" values, where m is the
* height of the image. Each pointer will eventually point to one row of
* pixel data.
* 2. For each pointer you just allocated, initialize it to point to
* heap-allocated space for an entire row of pixel data.
* 3. ...
* 4. ...
*/
struct pixel **read_pixel_array(FILE *image, int pixel_array_offset, int width, int height) {
}
Для первого шага выделите место для m "struct pixel *" ценности.Я думаю, что на самом деле это место для массива значений пикселей.Поэтому я ставлю
unsigned char **ptrs = height * malloc(sizeof(struct pixel));
Для второго шага я не совсем понимаю, что мне делать.Я думаю, что мне нужен цикл for, чтобы выделить место для всех строк данных пикселей.Но я понятия не имею, что мне следует положить внутрь.
for (int i=0, i<height, i++) {
}