소스 검색

Finished...

master
Ognjen Milan Robovic 1 개월 전
부모
커밋
985756685e
3개의 변경된 파일94개의 추가작업 그리고 4개의 파일을 삭제
  1. +1
    -0
      .gitignore
  2. +1
    -1
      compile.sh
  3. +92
    -3
      xiew.c

+ 1
- 0
.gitignore 파일 보기

@@ -0,0 +1 @@
xiew

+ 1
- 1
compile.sh 파일 보기

@@ -2,6 +2,6 @@

set -xe

gcc -g -ansi -Wall -Wextra -Wpedantic -Werror -o xiew xiew.c
gcc -g -ansi -Wall -Wextra -Wpedantic -Werror -o xiew xiew.c -lm -lpng

exit

+ 92
- 3
xiew.c 파일 보기

@@ -1,8 +1,97 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <png.h>

static unsigned int * image_buffer = NULL;
static unsigned int image_width = 0;
static unsigned int image_height = 0;

static void import_image (char * file_path) {
png_image temporary = { 0 };

temporary.version = PNG_IMAGE_VERSION;

if (png_image_begin_read_from_file (& temporary, file_path) == 0) {
printf ("PNG: Image init fuck up!\n");
exit (EXIT_FAILURE);
}

temporary.format = PNG_FORMAT_RGB;

image_width = temporary.width;
image_height = temporary.height;

image_buffer = calloc ((size_t) (image_width * image_height), sizeof (* image_buffer));

if (png_image_finish_read (& temporary, NULL, image_buffer, 0, NULL) == 0) {
printf ("PNG: Image read fuck up!\n");
exit (EXIT_FAILURE);
}

png_image_free (& temporary);
}

static void export_image (char * file_path) {
png_image temporary = { 0 };

temporary.version = PNG_IMAGE_VERSION;
temporary.format = PNG_FORMAT_RGB;
temporary.width = image_width;
temporary.height = image_height;

if (png_image_write_to_file (& temporary, file_path, 0, image_buffer, 0, NULL) == 0) {
printf ("PNG: Image write fuck up!\n");
}

png_image_free (& temporary);
}

int main (int argc, char * * argv) {
(void) argc;
(void) argv;
return (0);
FILE * file = NULL;

size_t file_size = 0;

if (argc != 4) {
printf ("Encode: xiew -e input output\n");
printf ("Decode: xiew -d input output\n");
return (EXIT_FAILURE);
}

if (strcmp (argv [1], "-e") == 0) {
printf ("Encoding...\n");
file = fopen (argv [2], "r");
if (file == NULL) printf ("File is null.\n");
fseek (file, 0, SEEK_END);
file_size = (size_t) ftell (file);
printf ("File size: %lu\n", file_size);
fseek (file, 0, SEEK_SET);
image_width = image_height = (unsigned int) (sqrt (((double) file_size) / 3.0) + 1);
printf ("Image size: %u x %u\n", image_width, image_height);
image_buffer = calloc ((size_t) (image_width * image_height), sizeof (* image_buffer));
image_buffer [0] = (unsigned int) file_size;
fread (& image_buffer [1], sizeof (char), file_size, file);
export_image (argv [3]);
} else if (strcmp (argv [1], "-d") == 0) {
printf ("Decoding...\n");
import_image (argv [2]);
file = fopen (argv [3], "w");
if (file == NULL) printf ("File is null.\n");
file_size = image_buffer [0];
printf ("File size: %lu\n", file_size);
fwrite (& image_buffer [1], sizeof (char), file_size, file);
} else {
printf ("Encode: xiew -e input output\n");
printf ("Decode: xiew -d input output\n");
return (EXIT_FAILURE);
}

if (image_buffer != NULL) {
free (image_buffer);
}

fclose (file);

return (EXIT_SUCCESS);
}

불러오는 중...
취소
저장