Attachment 'xpmex.c'

Download

   1 #include <stdio.h>
   2 #include <string.h>
   3 #include <stdlib.h>
   4 #include "face.xpm"
   5 
   6 int main(int argc, char *argv[]) {
   7   int Width, Height, PSize, BPP;
   8   int size;
   9   int beg, end, y, x, len;
  10   char **newface;
  11   FILE *fout;
  12 
  13   /* Извлекаем размеры картинки и палитры */
  14   /* ВНИМАНИЕ! Для простоты считаем, что BPP=1 */
  15   sscanf(face[0], "%d %d %d %d", &Width, &Height, &PSize, &BPP);
  16 
  17   /* Область картинки */
  18   beg = PSize+1;
  19   end = PSize+Height+1;
  20 
  21   /* Копия картинки, доступная для модификации */
  22   newface = calloc(end, sizeof(char *));
  23   for(y=size=0; y<end; y++) {
  24     len = strlen(face[y]);
  25     strcpy(newface[y]=malloc(len+1), face[y]);
  26   }
  27 
  28   /* Удаляем все '*' (красные точки) */
  29   for(y=beg; y<end; y++) 
  30     for(x=0; x<Width; x++)
  31       if(newface[y][x] == '*')
  32 	newface[y][x] = ' ';
  33 
  34   /* Посмотрим на безротую картинку */
  35   for(y=beg; y<end; y++)
  36     puts(newface[y]);
  37 
  38   /* Перевернём рот. ВНИМАНИЕ! Мы заранее знали, в каких он строках */
  39   for(y=0; y<4; y++)
  40     for(x=0; x<Width; x++)
  41       if(face[end-8+y][x] == '*')
  42 	newface[end-7-y][x] = '*';
  43 
  44   /* Создадим XPM-файл. ВНИМАНИЕ! Индентификатор картинки задан заранее */
  45   fout = fopen("sadface.xpm","w");
  46   fputs("/* XPM */",fout);
  47   fputs("static char * sadface[] = {",fout);
  48   for(y=0; y<end-1; y++)
  49     fprintf(fout,"\"%s\",\n",newface[y]);
  50   fprintf(fout,"\"%s\"};\n",newface[y]);
  51   fclose(fout);
  52 
  53   return 0;
  54 }

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.

You are not allowed to attach a file to this page.