在C Ubuntu中显示图像

时间:2015-12-09 01:07:58

标签: c linux image ubuntu compression

我是Linux(Ubuntu)的新手,我必须在C中做一个必须解压缩图像,打印图像大小并显示图像的代码。 我必须使用zcat,wc(wc -c)和xview(xview stdin)。 这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <errno.h>


int PID;
int PIPE1[2];

void zcat(char INPUT[]) 
{
   dup2(PIPE1[1],STDOUT_FILENO);
   close(PIPE1[0]);
   close(PIPE1[1]);
   execlp("zcat","zcat",INPUT,NULL);
   perror("\nzcat malo\n");
   exit(0);
}

void show_image() 
{     
   dup2(PIPE1[0],STDIN_FILENO);
   close(PIPE1[0]);
   close(PIPE1[1]);
   execlp("xview","xview","stdin",NULL);
   perror("\nxview malo\n");
   exit(0);
}

void image_size() 
{     
   dup2(PIPE1[0], STDIN_FILENO);
   close(PIPE1[0]); 
   close(PIPE1[1]);
   execlp("wc","wc","-c",NULL);
   perror("\nwc error\n");
   exit(0);
}

void xview(char INPUT[])
{
   if(pipe(PIPE1)==-1) 
   {
      perror("\npipe1 malo\n");
      exit(1);
   }
   if((PID=fork())==-1)
   {
        perror("\nfork1 error\n");
        exit(1);
   }
   else if(PID==0)  zcat(INPUT);
   if((PID=fork())==-1) 
   {
        perror("\nfork2 error\n");
        exit(1);
   } 
   else if(PID==0) show_image();
   close(PIPE1[0]);
   close(PIPE1[1]);
}


void wc(char INPUT[])
{
    if(pipe(PIPE1)==-1) 
    {
        perror("\npipe1 malo\n");
        exit(1);
    }
    if((PID=fork())==-1) 
    {
        perror("\nfork1 error\n");
        exit(1);
    } 
    else if(PID==0) zcat(INPUT);
    if((PID=fork())==-1) 
    {
        perror("\nfork2 error\n");
        exit(1);
    }
    else if(PID==0) image_size();
    close(PIPE1[0]);
    close(PIPE1[1]);
}



void main() 
{
   char INPUT[20];
   scanf("%s",INPUT);
   xview(INPUT);
   wc(INPUT);
}

在INPUT中,我必须输入包含图像的文件名(image.png)。 imagelinux.png.gz 当我在终端中运行它时程序显示“xview malo”:没有这样的文件或目录 并以字节为单位打印图像大小。 它没有显示图像:C 帮助!

1 个答案:

答案 0 :(得分:0)

使用sudo apt-get install xloadimage安装xview,您的程序将正常运行。