Opened 4 years ago

Closed 4 years ago

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

HW #1

Reported by: Roman Venediktov Owned by: Sokolov Viacheslav
Component: HW #1 (BMP) Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 4 years ago by Sokolov Viacheslav

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

Makefile: не хватает зависимости hw_01 от obj/bmp.o

38 if (w <= 0
x + w > input_img->bi_height) {

39 printf("Invalid argument w: %d\n", w);
40 exit(1);
41 }

здесь опечатка

можно упростить ввод-вывод, если отключить выравнивание полей структур компилятором. Для этого есть, например, https://stackoverflow.com/questions/3318410/pragma-pack-effect

119 rotated_image->bi_x_pels_per_meter = image->bi_y_pels_per_meter;
120 rotated_image->bi_y_pels_per_meter = image->bi_x_pels_per_meter;
я сначала тоже думал, что нужно поменять местами (логично же, при повороте меняются местами x и y), но после более детального изучения кажется, что все же не надо: https://stackoverflow.com/questions/17550545/bmp-image-header-bixpelspermeter . Кажется, это характеристики скорее устройства, чем изображения.

((rotated_image->bi_width * 3 + 3) / 4) * 4
лучше вынести код получения размера с учетом alignment-а в отдельную функцию

в crop неправильно вырезается область (картинка хранится перевернутой)

140 rotated_image->pixels[rotated_image->bi_height - 1 - i][j * 3 + k] = image->pixels[j][i * 3 + k];
здесь можно было бы использовать memcpy

в целом хорошая попытка

comment:2 Changed 4 years ago by Roman Venediktov

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

comment:3 Changed 4 years ago by Sokolov Viacheslav

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

load_bmp: в случае, если что-то идет не так, необходимо еще позвать fclose(input)

54 и 8 стоило бы вынести в именованные константы

save_bmp: line_end_size имеет размер не более 4. Выделять на куче незачем, можно было выделять на стэке.
Это место реализовано некорректно, потому что
https://en.cppreference.com/w/c/memory/malloc

If size is zero, the behavior is implementation defined (null pointer may be returned, or some non-null pointer may be returned that may not be used to access storage, but has to be passed to free).


инициализацию пустого изображения стоило бы вынести в отдельную функцию

Note: See TracTickets for help on using tickets.