Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "lab_png.h"
- #include "crc.h"
- #include "crc.c"
- #include <stdio.h>
- #include <stdlib.h>
- #include <arpa/inet.h>
- int is_png(U8 *buf) {
- int png_bytes[8] = {137, 80, 78, 71, 13, 10, 26, 10}; // png decimal signature
- for (int i = 0; i < 8; i++) {
- if (buf[i] != png_bytes[i]) {
- return 0;
- }
- }
- return 1;
- }
- int get_png_data_IHDR(struct data_IHDR *out, U8 *buf) {
- U32 *dimen_buf = (U32 *) (buf + 16 * sizeof(U8));
- out->width = ntohl(dimen_buf[0]);
- out->height = ntohl(dimen_buf[1]);
- dimen_buf = NULL;
- free(dimen_buf);
- return 0;
- }
- int main(int argc, char *argv[]) {
- long int f_size;
- FILE *f_ptr;
- U8 *buf;
- f_ptr = fopen(argv[1], "rb");
- fseek(f_ptr, 0, SEEK_END);
- f_size = ftell(f_ptr);
- rewind(f_ptr);
- buf = (U8 *)malloc((f_size + 1) * sizeof(U8));
- fread(buf, f_size, 1, f_ptr);
- rewind(f_ptr);
- if (!is_png(buf)) {
- printf("%s: Not a PNG file\n", argv[1]);
- return 0;
- }
- struct data_IHDR *ihdr = (struct data_IHDR*) malloc(sizeof(ihdr));
- get_png_data_IHDR(ihdr, buf);
- printf("%s: %d x %d\n", argv[1], ihdr->width, ihdr->height);
- buf = NULL;
- f_ptr = NULL;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement