\documentclass{article}
  % Márgenes
  \textheight    = 20cm
  \textwidth     = 8cm % para ver como babel divide palabras...
  \topmargin     = -2cm
  \oddsidemargin = -1cm
  % Sangría
  \parindent     =  0mm
  %Otra opción para márgenes, etc. Paquete geometry... ancho = 8cm
  %\usepackage[total={8cm,21cm},top=2cm, left=2cm]{geometry}

  %Paquetes adicionales
  \usepackage{latexsym,amsmath,amssymb,amsfonts}
  \usepackage[latin1]{inputenc}
  \usepackage[T1]{fontenc}
  \usepackage{graphicx}
  \usepackage[spanish]{babel} % Idioma español
  \renewcommand{\baselinestretch}{1.5} % espaciado 1 y 1/2 
  \pagestyle{myheadings}
  \markright{...... texto .......}


\begin{document}

\section{Crear una Imagen desde C} La definición de una imagen nos lleva al mundo de las matrices. Una matriz no es más que un arreglo en dos dimensiones, la dimensión de los renglones y la dimensión de las columnas.

Los valores de renglones y columnas son del tipo entero. En una imagen esos valores definen el alto y ancho. 

Las imágenes tienen un formato, el formato más popular en las camaras fotográficas y celulares es el jpg o  jpeg, pero existen además el gif, bmp, tif, png, ppm y otros.
Nos quedamos con el formato ppm por razones de sencillez e identificación rápida de los elementos estructurales que componen una imagen, así entonces el formato ppm tiene la siguiente estructura o sintaxis:
\begin{itemize}
  \item Tipo de imagen
  \item Comentario (no es obligatorio colocar un comentario, puede omitirse)
 \item Ancho Alto
  \item Valor máximo del color
  \item Datos
\end{itemize}

Un ejemplo de una imagen de 10 de ancho por 10 de alto para una imagen de color negro es el siguiente:
\begin{verbatim}
P3
# Imagen de ejemplo de 10 de ancho 10 de alto
10 10
255
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
\end{verbatim}
Ahora el ejemplo de código en C que puede imprimir esta información
\begin{verbatim}
#include<stdioh>
main(){
     int i,j;
     printf("P3\n");
     printf("# Imagen de ejemplo de 10 de ancho 10 de alt\n");
     printf("10 10\n255\n");
     for(i=0;i<10;i++){
          for(j=0;j<10;j++)
              printf("0 0 0 ");
          printf("\n");
     }
}

\end{verbatim}
\section{Shell script - imágenes}
Veamos ahora como podemos generar una imagen \textit{ppm} a partir de un script del shell.
\begin{verbatim}
#    El script recibe tres argumentos, ejemplo de ejecución: 
#    bash ejercicio.sh 2 50 20

tipoImagen=$1    #indica el tipo de imagen a crear
ancho=$2         #variable que almacena el ancho de la imagen
alto=$3          #variable que almacena el alto de la imagen

# se imprime primero el encabezado de la imagen
echo P$tipoImagen > imagen.ppm
echo $ancho $alto >> imagen.ppm
if [ $tipoImagen -ne 1 ]  # para una imagen binaria (tipo 1) no se requiere el valor 255
then
     echo 255 >> imagen.ppm
fi

#Ahora se imprimen los datos de la imagen
pixeles=`expr $ancho \* $alto` 
for i in `seq 1 $pixeles`
do
     if [ $tipoImagen -eq 1 ]
     then
          echo -n "0 " >> imagen.ppm
     elif [ $tipoImagen -eq 2 ]
     then
          echo -n "255 "  >> imagen.ppm
     else
          echo "0 255 0 "  >> imagen.ppm
     fi   
done
eog imagen.ppm
\end{verbatim}
\end{document}
