diff --git a/README.md b/README.md index 07947c8..add5ad0 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ make clean build install ## CLI arguments ```txt -usage: margen [--help] [-v] [-q] [-w=WIDTH] [-h=HEIGHT] [-o=PATH] [--seed=SEED][-p=PIXEL_SIZE] [-s=SLOPE] [-c=R,G,B] [-va=R,G,B] [-vr=VAR_RANGE] [-r=ROTATION] +usage: margen [--help] [-v] [-q] [-w=WIDTH] [-h=HEIGHT] [-o=PATH] [--seed=SEED][-p=PIXEL_SIZE] [-s=SLOPE] [-c=R,G,B] [-va=R,G,B] [-vr=VAR_RANGE] [-r=ROTATION] [-m] generate a marble-like pattern bitmap image, blazing fast. @@ -39,8 +39,9 @@ options: -va, --variation fixed variation [0-255,0-255,0-255] (default: random) -vr, --var-range random variation range [0-255] (default: 30) -r, --rotation start corner rotation [0-3] (default: random) + -m, --monochrome grayscale generation ``` ## TODO -- fix monochrome \ No newline at end of file +- configure, make, make install \ No newline at end of file diff --git a/src/args.c b/src/args.c index dac1785..f1c939d 100644 --- a/src/args.c +++ b/src/args.c @@ -40,8 +40,7 @@ void print_help(int status_code) { "random)\n" " -vr, --var-range random variation range [0-255] (default: 30)\n" " -r, --rotation start corner rotation [0-3] (default: random)\n" - // " -m, --monochrome black & white generation\n" - ); + " -m, --monochrome grayscale generation\n"); exit(status_code); } diff --git a/src/bmp.c b/src/bmp.c index 974bd1d..bf70359 100644 --- a/src/bmp.c +++ b/src/bmp.c @@ -32,23 +32,36 @@ unsigned char *bmp_header(unsigned short width, unsigned short height, unsigned char *output = (unsigned char *)malloc(HEADER_SIZE); unsigned int data_length = ((unsigned int)width) * ((unsigned int)height) * ((unsigned int)color_depth); - write_str(output, 0x00, 0x02, (unsigned char *)"BM"); // 0x00(2) BM - write_num(output, 0x02, 0x04, - HEADER_SIZE + data_length); // 0x02(4) file size - write_nul(output, 0x06, 0x04); // 0x06(4) application reserved - write_num(output, 0x0A, 0x04, HEADER_SIZE); // 0x0A(4) data offset - write_num(output, 0x0E, 0x04, 40); // 0x0E(4) DIB header size - write_num(output, 0x12, 0x04, width); // 0x12(4) width - write_num(output, 0x16, 0x04, height); // 0x16(4) height - write_num(output, 0x1A, 0x04, 1); // 0x1A(2) color panes - write_num(output, 0x1C, 0x02, color_depth * 8); // 0x1C(2) bits per pixel - write_nul(output, 0x1E, 0x04); // 0x1E(4) BI_RGB, no compression - write_num(output, 0x22, 0x04, - data_length); // 0x22(4) size of raw bitmap data - write_num(output, 0x26, 0x04, 2835); // 0x26(4) horizontal print resolution - write_num(output, 0x2A, 0x04, 2835); // 0x2A(4) vertical print resolution - write_nul(output, 0x2E, 0x04); // 0x2E(4) color in palette - write_nul(output, 0x32, 0x04); // 0x32(4) 0 important colors + // 0x00(2) BM + write_str(output, 0x00, 0x02, (unsigned char *)"BM"); + // 0x02(4) file size + write_num(output, 0x02, 0x04, HEADER_SIZE + data_length); + // 0x06(4) application reserved + write_nul(output, 0x06, 0x04); + // 0x0A(4) data offset + write_num(output, 0x0A, 0x04, HEADER_SIZE); + // 0x0E(4) DIB header size + write_num(output, 0x0E, 0x04, 40); + // 0x12(4) width + write_num(output, 0x12, 0x04, width); + // 0x16(4) height + write_num(output, 0x16, 0x04, height); + // 0x1A(2) color panes + write_num(output, 0x1A, 0x04, 1); + // 0x1C(2) bits per pixel + write_num(output, 0x1C, 0x02, color_depth * 8); + // 0x1E(4) BI_RGB, no compression + write_nul(output, 0x1E, 0x04); + // 0x22(4) size of raw bitmap data + write_num(output, 0x22, 0x04, data_length); + // 0x26(4) horizontal print resolution + write_num(output, 0x26, 0x04, 2835); + // 0x2A(4) vertical print resolution + write_num(output, 0x2A, 0x04, 2835); + // 0x2E(4) color in palette (0) + write_nul(output, 0x2E, 0x04); + // 0x32(4) important colors (0) + write_nul(output, 0x32, 0x04); return output; } diff --git a/src/generator.c b/src/generator.c index a7b5a03..a712bd8 100644 --- a/src/generator.c +++ b/src/generator.c @@ -7,6 +7,8 @@ #include #include +#define BMP_COLOR_DEPTH 3 + parameters global_params; float slope; unsigned char color_depth; @@ -47,7 +49,7 @@ void generate_bmp_line(unsigned short y, unsigned char *data_buffer, generate_line(); } for (i = 0; i < len; i++) { - x = i / (color_depth * global_params.size); + x = i / (BMP_COLOR_DEPTH * global_params.size); data_buffer[(global_params.rotation / 2) == 1 ? i : (len - i - 1)] = current_line[x * color_depth + (i % color_depth)]; } @@ -106,7 +108,7 @@ void generate(parameters params) { } clock_t start = clock(); init(params); - bmp_generate(params.width, params.height, color_depth, + bmp_generate(params.width, params.height, BMP_COLOR_DEPTH, params.rotation % 2 == 1, params.file_path, generate_bmp_line); clean(); print_time(params, start);