Publi

  • Edición de vídeo en GNU/Linux con software libre, ¿qué características necesito para editar vídeo?

    El momento ha llegado, tras tantos años sin pensar en ella. He vuelto a encontrármela, ahí de pie, delante de mí. Su nombre es Pandora y con una risa maliciosa viene a este humilde blog. A llenar nuestras almas de oscuridad aumentando el contraste y corrigiendo el color.

    Aunque poco a poco he estado soltando pinceladas en el tiempo sobre imagen digital en GNU/Linux, vídeo digital, integración de algunas técnicas y demás.… Leer artículo completo

  • Generando imágenes en C, sólo por diversión, empezando desde cero (Parte I)

    colores_y_formasHace tiempo que no pongo nada de imagen digital, y ya tenía ganas. No haremos nada complicado, pero muchas veces, cuando empezamos a programar, pensamos en representar el contenido de un array en una imagen, o para esas veces en que pensamos que un simple algoritmo nos puede ayudar a crear la imagen que queremos.

    Cómo generar las imágenes

    Para generar las imágenes, vamos a pensar en un buffer sencillo, lineal de tipo unsigned char, o uint8_t, para imágenes en blanco y negro… vamos a empezar con imágenes sencillas, ya meteremos color… y más cosas.… Leer artículo completo

  • Leyendo archivos de imagen en formato BMP en C

    n1214332197_30461081_3311160

    Hoy vamos a practicar a leer una imagen desde un archivo BMP desde C. Aunque existen muchas APIs disponibles que son capaces de hacerlo, y mucho mejor que lo que voy a plantear (puesto que nos limitaremos a BMPs sin compresión y a 24bits por pixel), es un buen ejercicio para leer archivos con un formato especificado y documentado.

    Para este tipo de archivos, tendremos dos cabeceras disponibles, la primera será la cabecera de fichero, y la segunda, la cabecera de información de imagen, que las definimos aquí:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    typedef struct bmpFileHeader
    {
      /* 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.
    Leer artículo completo