[Ayuda] Abrir fichero de imagen en c

Iniciado por Mioshi, 14 Enero 2014, 19:10 PM

0 Miembros y 1 Visitante están viendo este tema.

Mioshi

Hola comunidad, hoy me dejaron un proyecto en TC20. El proyecto se basa en abrir ficheros y modo grafico. Lo que me preocupa es la parte de abrir el fichero de una imagen, tengo entendido que solo se pueden abrir imagenes con extension .bmp pero no se como hacerlo. Si alguien me puede ayudar con un codigo de ejemplo se lo agradeceria mucho.

Espero su respuesta y muchas gracias de antemano.

vangodp

Si no te han dicho que librería usar puedes optar por una como SDL.
Y si le añades SDL_image si que puedes abrir cualquier formato.
Y ademas es relativamente fácil.
Descargas las librerías de SDL, añades al IDE y a la carpeta donde va el .exe añades una dll o según el tipo de imagen que vayas cargar(jpg, tga, bmp...) mas de una dll(una dll por cada tipo de imagen extra a parte de la bmp).
SDL trabaja con bmp, si quieres estos otros formatos necesitas una especie de extensión que te permite cargar los otros formatos.
No se si hay alguna librería mas a mano, SDL es como matar moscas a cañonazo no se XD
Es una librería multimedia, te sirve para hacer aplicaciones, videojuegos, sonidos, gestionar entrada salida, joystick, red todo.
cargar una imagen es fácil, mas difícil es configurar la librería pero tampoco es un bicho de 7 cabezas.
Si te interesa dímelo y te echo una mano.
::)



Mioshi

hola, gracias por responder pero no entiendo mucho lo que me estas tratando de explicar, estoy empezando a programar en c y pues no se si me puedas ayudar con un ejemplo especifico

#include <alloc.h>
#include <conio.h>
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>


typedef struct
{
  char Type[2];           /*Tipo de archivo. establecido en "BM".*/
  unsigned long Size;     /*Tamano en BYTES del archivo*/
  unsigned long Reserved;      /*Reservado. establecido en cero*/
  unsigned long OffSet;   /*Desplazamiento hacia datos*/
  unsigned long headsize; /*Tamaño de la cabecera del bitmap. establecido en 40.*/
  unsigned long Width;     /*Anchura en  pixeles.*/
  unsigned long Height;     /* Altura en pixeles.*/
  unsigned int  Planes;    /*Numero de Planos. establecido en 1.*/
  unsigned int  BitsPerPixel;       /*Numero de Bits por pixeles.*/
  unsigned long Compression;   /*Compresion. Usually establecido en 0.*/
  unsigned long SizeImage;  /*Tamano en BYTES del bitmap.*/
  unsigned long XPixelsPreMeter;     /*Pixeles Horizontales por metro.*/
  unsigned long YPixelsPreMeter;     /*Pixeles Verticales por metro.*/
  unsigned long ColorsUsed;   /*Numero de colores utilizados.*/
  unsigned long ColorsImportant;  /*Numero de colores "Importantes".*/
}BMP;

int muestraBMP(int x, int y, char* NomArchivo);
void main()
{
int color;
int gd , gm ;
gd = VGA ; gm = VGAHI;
clrscr();
initgraph(&gd,&gm,"C:\TC20\BIN");
muestraBMP(0,0,"pez.bmp"); /* Ingresa el nombre y direccion del archivo aqui */
getch();
closegraph();
}

int muestraBMP(int x, int y, char* NomArchivo)
{
    int b,a;
    BMP Obj;

    unsigned char* Datas;
    int in=0;
    unsigned char c=0;
    FILE * fp;

    fp = fopen(NomArchivo,"rb");
    if(!fp){
    printf("Error : No se puede abrir el archivo ...");
getch();
    exit(0);
    }

    fread(&Obj, sizeof(Obj), 1, fp);
    if(Obj.BitsPerPixel!=4)  /* Este NO es un bmp de 16 colores que podamos leer*/
    {
     fclose(fp);
     printf("Error : Formato de archivo no soportado...");
getch();
     exit(0);
    };
    fseek(fp,Obj.OffSet,SEEK_SET);
    Datas=(unsigned char*) calloc(Obj.Width/2+1, sizeof(unsigned char));
    for(b=Obj.Height;b>=0;b--)
    {
     fread(Datas, sizeof(unsigned char), Obj.Width/2, fp);
     c=0;
     in=0;
     for(a=0;a<=Obj.Width;a+=2)
     {
c = (Datas[in] | 0xF0) & 0x0F;
         putpixel(a+1+x,b+y,c);
         c = (Datas[in] | 0x00) >>4;
         putpixel(a+x,b+y,c);
         in++;
     }
    }
    free (Datas);
    fclose(fp);
    return 1;
}


Este es un codigo que me paso una amiga, pero no me corre muy bien, no se que estoy haciendo mal

vangodp


Mioshi


vangodp

Que compilador usas?
Yo uso codeblocks y me esta tirando errores por que no incluye estas librerias de graficos

Mioshi


vangodp

Basicamente estas 2 no las encuentra

#include <alloc.h>
#include <graphics.h>

vangodp

No te voy a poder ayudar.
No tengo turbo c :(

vangodp

por lo que veo la imagen debe estar junto en la carpeta y llamar la imagen de pez.bmp XD
Si te tira errores pon el aviso aqui a ver si averiguamos que le pasa