Opened 3 years ago

Closed 3 years ago

#265 closed ожидается проверка (задача сдана)

HW #1

Reported by: Kuznetsov Kirill Owned by: Святослав Власов
Component: HW #1 (BMP) Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления

Корректность 10/20

  1. Изображения с ненулевым паддингом (выравниванием строк, тобишь), когда ширина изображения не делится на 4, твоей программой обрабатываются неверно. То сегфолт, то какие-то артефакты.
  2. При попытке повернуть неквадратное изображение целиком -- тоже сегфолт

Стиль -- 3/10

  1. Гарды и #pragma once -- это одно и то же, нет смысла их использовать вместе
  2. Использовать int в объявлении структуры, которую ты читаешь с диска -- это ошибка. Размер int зависит от компилятора, платформы и иногда положения сатурна в водолее. Для стандартного gcc под linux-x86 он действительно будет 4 байта, как ты ожидаешь, но в общем случае это может оказаться не так. Можно скомпилировать под x64 и он будет 8 байт, тогда весь твой код будет работать неверно. Для того, чтобы не зависить от компилятора, используй типы данных с точной длиной -- uint32_t и т.п..
  3. Выделенную память хорошо бы проверять assert'ами
  4. Сделай функцию get_pixel(bmp, x, y), которая будет возвращать указатель на пиксель по координатам, тогда не придется писать таких монструозных нечитаемых (и скорее всего багованных) конструкций. А еще обратный слеш в конце строки совершенно не нужен
            &cropped_bmp->image[cropped_bmp->width *\
            (i - bmp->height + height + y)],\
            &bmp->image[bmp->width * i + x * 3]
    
    
  5. Инициализацию хедера у изображения хорошо бы вынести в отдельную функцию, а не копи-пастить.
  6. int i можно инициализировать внутри цикла
  7. Вместо того, чтобы копировать изображение из rotated/cropped_bmp обратно в исходное, лучше чтобы функции crop и rotate принимали на вход указатели на входное и выходное изображение и записывали результат в выходное, не изменяя входного. Это проще писать и проще читать потом.
  8. Отступы у тебя не по кодстайлу. Не пишется так:
        assert(x >= 0 && x + width <= bmp->header.biWidth && y >= 0 \
        && y + height <= bmp->header.biHeight);
    

comment:2 Changed 3 years ago by Kuznetsov Kirill

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

У меня в стандарте языка не разрешено объявлять переменные в цикле for.

comment:3 Changed 3 years ago by Святослав Власов

Resolution: задача сдана
Status: assignedclosed

Теперь всё ок, 30.

Note: See TracTickets for help on using tickets.