Ydalb In Crêpes n' Cidre I Trust! | Bonjour à tous!
J'ai besoin de créer un programme qui va lire les pixels d'une image png 1 par 1 (pour plus tard y reconnaitre des lettres dedans).
Voici mon header :
Code :
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdarg.h>
- #define PNG_DEBUG 3
- #include <png.h>
- void read_png_file(char* file_name);
- void process_file(void);
- void abort_(const char * s, ...);
|
Et voici mon .c :
Code :
- /*
- * Copyright 2002-2008 Guillaume Cottenceau.
- *
- * This software may be freely redistributed under the terms
- * of the X11 license.
- *
- */
- #include "open_png.h"
- /*
- * Ne pas mettre en variables globales
- */
- int x, y;
- int width, height;
- png_byte color_type;
- png_byte bit_depth;
- png_structp png_ptr;
- png_infop info_ptr;
- int number_of_passes;
- png_bytep * row_pointers;
- void read_png_file(char* file_name)
- {
- printf("Entering read_png_file" );
- char header[8]; // 8 is the maximum size that can be checked
- /* open file and test for it being a png */
- FILE *fp = fopen(file_name, "rb" );
- if (!fp)
- abort_("[read_png_file] File %s could not be opened for reading", file_name);
- fread(header, 1, 8, fp);
- if (png_sig_cmp(header, 0, 8))
- abort_("[read_png_file] File %s is not recognized as a PNG file", file_name);
- /* initialize stuff */
- png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
- if (!png_ptr)
- abort_("[read_png_file] png_create_read_struct failed" );
- info_ptr = png_create_info_struct(png_ptr);
- if (!info_ptr)
- abort_("[read_png_file] png_create_info_struct failed" );
- if (setjmp(png_jmpbuf(png_ptr)))
- abort_("[read_png_file] Error during init_io" );
- png_init_io(png_ptr, fp);
- png_set_sig_bytes(png_ptr, 8);
- png_read_info(png_ptr, info_ptr);
- width = info_ptr->width;
- height = info_ptr->height;
- color_type = info_ptr->color_type;
- bit_depth = info_ptr->bit_depth;
- number_of_passes = png_set_interlace_handling(png_ptr);
- png_read_update_info(png_ptr, info_ptr);
- /* read file */
- if (setjmp(png_jmpbuf(png_ptr)))
- abort_("[read_png_file] Error during read_image" );
- row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height);
- for (y=0; y<height; y++)
- row_pointers[y] = (png_byte*) malloc(info_ptr->rowbytes);
- png_read_image(png_ptr, row_pointers);
- fclose(fp);
- }
- /*
- * Voir pour creer un tableau autre que ptr pour se creer unn tableau perso, genre monochromatique en prenant une couleur
- * de fond unique et une couleur de lettre unique.
- */
- void process_file(void)
- {
- if (info_ptr->color_type != PNG_COLOR_TYPE_RGBA)
- abort_("[process_file] color_type of input file must be PNG_COLOR_TYPE_RGBA (is %d)", info_ptr->color_type);
- for (y=0; y<height; y++) {
- png_byte* row = row_pointers[y];
- for (x=0; x<width; x++) {
- /* png_byte* ptr = &(row[x*4]); */
- png_uint_16* ptr = (png_uint_16*)&(row[x*6]);
- printf("Pixel at position [ %d - %d ] has the following RGBA values: %d - %d - %d - %d\n",
- x, y, ptr[0], ptr[1], ptr[2], ptr[3]);
-
- /* set red value to 0 and green value to the blue one */
- ptr[0] = 0;
- ptr[1] = ptr[2];
- }
- }
-
- }
- void abort_(const char * s, ...)
- {
- printf("moo" );
- va_list args;
- va_start(args, s);
- vfprintf(stderr, s, args);
- fprintf(stderr, "\n" );
- va_end(args);
- abort();
- }
- int main(int argc, char **argv)
- {
- if (argc < 2)
- {
- printf("Usage: program_name <file_in>" );
- exit(1);
- }
- printf("Opening %s ...\n", argv[1]);
- read_png_file(argv[1]);
- printf("Proccessing %s ...\n", argv[1]);
- process_file();
- return 0;
- }
|
Lors de la compilation du programme, j'obtiens un warning :
Citation :
[ledolequ@fujiw120-l projet]$ gcc -Wall -g -lpng open_png.c
open_png.c: In function 'read_png_file':
open_png.c:43: attention : pointer targets in passing argument 1 of 'png_sig_cmp' differ in signedness
La ligne 43 correspond à :
if (png_sig_cmp(header, 0, 8))
|
Et lorsque j'essaie de lancer le programme avec une image en paramètre, voici ce qui se passe :
Citation :
[ledolequ@fujiw120-l projet]$ ./png ref.png Opening ref.png ...
[ledolequ@fujiw120-l projet]$
|
Autrement dit, il a l'air de bloqué entre
Code :
- printf("Opening %s ...\n", argv[1]);
- read_png_file(argv[1]);
|
Des idées ? Message édité par Ydalb le 23-11-2009 à 15:36:29 ---------------
:o
|