Este es el código que estoy utilizando.
Código C:
Ver original
#include <stdio.h> #include <string.h> #include <stdint.h> #include <stdlib.h> #include <X11/X.h> #include <X11/Xlib.h> #include <X11/Xutil.h> FILE *fimg,*ftext; void nombre_archivo(char texto[]); void leer_imagen(); void abrir_imagen(); char nombre[20]="imagen.txt"; char ruta[100]="/home/albert/Downloads/imagen.bmp"; typedef struct bmpFileHeader { uint32_t magic; /* 2 bytes de identificación */ uint32_t size; /* Tamaño del archivo */ uint16_t resv1; /* Reservado */ uint16_t resv2; /* Reservado */ uint32_t offset; /* Offset hasta hasta los datos de imagen */ } bmpFileHeader; typedef struct bmpInfoHeader { uint32_t headersize; /* Tamaño de la cabecera */ uint32_t width; /* Ancho */ uint32_t height; /* Alto */ uint16_t planes; /* Planos de color (Siempre 1) */ uint16_t bpp; /* bits por pixel */ uint32_t compress; /* compresión */ uint32_t imgsize; /* tamaño de los datos de imagen */ uint32_t bpmx; /* Resolución X en bits por metro */ uint32_t bpmy; /* Resolución Y en bits por metro */ uint32_t colors; /* colors used en la paleta */ uint32_t imxtcolors; /* Colores importantes. 0 si son todos */ } bmpInfoHeader; typedef struct { unsigned char r,g,b,junk; } COLOURINDEX; int main(){ //nombre_archivo(ruta); leer_imagen(); abrir_imagen(); return 0; } void leer_imagen(){ bmpInfoHeader bInfoHeader; bmpFileHeader header; if (!fimg){ } /* Leemos la cabecera de fichero completa */ } void abrir_imagen(){ bmpInfoHeader bInfoHeader; bmpFileHeader header; int gotindex=1; unsigned char junk,r,g,b; COLOURINDEX colourindex[256]; int screen; Display *display; display = XOpenDisplay(NULL); Window xwindow; screen = DefaultScreen(display); xwindow = RootWindow(display,screen); int i,j; long rgb; GC gr_context1=XCreateGC(display,xwindow,0,0); for (i=0;i<255;i++) { } if (bInfoHeader.colors > 0) { for (i=0;i<bInfoHeader.colors;i++) { } } } } colourindex[i].r,colourindex[i].g,colourindex[i].b); } gotindex = 0; } /* Nos desplazamos el valor de offset hasta llegar a la zona de los datos */ /* Hay que invertir los indices porque la imagen se muestra al reves*/ for(j=(bInfoHeader.height) -1;j>=0;j--) { for(i=0;i<bInfoHeader.width;i++) { switch(bInfoHeader.bpp) { case 1: break; case 4: break; case 8: } if(gotindex){ } else { } break; case 24: } } } /*Obtenemos el valor del color a partir del RGB*/ rgb=65536 * r + 256 * g + b; /*Marcamos el color obtenido*/ XSetForeground(display, gr_context1, rgb); /*Dibujamos el punto correspondiente*/ XDrawPoint(display, xwindow, gr_context1, i, j); break; } }//i }//j }
Un saludo