diff options
Diffstat (limited to 'tools/png_dimensions.c')
-rw-r--r-- | tools/png_dimensions.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/png_dimensions.c b/tools/png_dimensions.c new file mode 100644 index 000000000..5bdc12e4c --- /dev/null +++ b/tools/png_dimensions.c @@ -0,0 +1,53 @@ +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> + +void usage(void) { + fprintf(stderr, "Usage: png_dimensions infile, outfile\n"); + exit(1); +} + +void output_dimensions(char* png_filename, char* out_filename) { + FILE* f; + int width, height; + int i; + uint8_t bytes[4]; + uint8_t output; + + f = fopen(png_filename, "rb"); + if (f == NULL) { + fprintf(stderr, "failed to open file %s\n", png_filename); + exit(1); + } + + // width + fseek(f, 16, SEEK_SET); + fread(bytes, 1, 4, f); + fclose(f); + + width = 0; + for (i = 0; i < 4; i++) { + width |= bytes[i] << (8 * (3 - i)); + } + width >>= 3; + height = width; + + output = width & 0xf; + output |= (height & 0xf) << 4; + + f = fopen(out_filename, "wb"); + if (f == NULL) { + fprintf(stderr, "failed to open file %s\n", out_filename); + exit(1); + } + fwrite(&output, 1, 1, f); + fclose(f); +} + +int main(int argc, char* argv[]) { + if (argc < 3) { + usage(); + } + output_dimensions(argv[1], argv[2]); + return 0; +} |