diff options
Diffstat (limited to 'src/capture.c')
| -rw-r--r-- | src/capture.c | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/src/capture.c b/src/capture.c index 521774a..042eb14 100644 --- a/src/capture.c +++ b/src/capture.c @@ -6,20 +6,64 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/11 13:15:11 by cacharle #+# #+# */ -/* Updated: 2020/01/16 07:49:17 by cacharle ### ########.fr */ +/* Updated: 2020/02/01 13:49:43 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" +#define BM_FILE_TYPE 19778 +#define DATA_OFFSET 1078 +#define BITMAP_INFO_HEADER_SIZE 40 +#define CAPTURE_FILENAME "capture.bmp" + int capture(t_state *state) { - printf("capture\n"); - /* render_update_window(state); */ - /* write_bmp(&state->window); */ + t_bmp_header header; + + render_update_window(state); + bmp_fill_header(&state->window, &header); + if (!bmp_write(&state->window, &header)) + { + state_destroy(state); + return (1); + } return (0); } -void write_bmp(t_image *image) +t_bool bmp_write(t_image *image, t_bmp_header *header) +{ + int fd; + + if ((fd = open(CAPTURE_FILENAME, O_WRONLY | O_CREAT)) < 0) + return (FALSE); + printf("%d\n", fd); + write(fd, &header, sizeof(t_bmp_header)); + write(fd, image->data, image->width * image->height * 4); + close(fd); + return (TRUE); +} + +void bmp_fill_header(t_image *image, t_bmp_header *header) { + header->file_header.file_type = BM_FILE_TYPE; + header->file_header.file_size = sizeof(t_bmp_header) + image->width * image->height * 4; + header->file_header.reserved1 = 0; + header->file_header.reserved1 = 0; + header->file_header.offset = DATA_OFFSET; + header->info_header.size = sizeof(t_bmp_header) + image->width * image->height * 4; + header->info_header.width = image->width; + header->info_header.height = image->height; + header->info_header.planes = 0; + header->info_header.depth = 8 * 4; + header->info_header.compression = 0; + header->info_header.size_image = 0; + header->info_header.w_pix_per_meter = 0; + header->info_header.h_pix_per_meter = 0; + header->info_header.color_used = 0; + header->info_header.color_important = 0; + header->color_table.blue = 0xff; + header->color_table.green = 0xff; + header->color_table.red = 0xff; + header->color_table.reserved = 0; } |
