发送特定文件以使用c程序进行打印

时间:2014-02-08 23:00:26

标签: c opencv popen cups

我正在编写一个opencv程序,更改图像颜色并使用用户指定的名称保存图像,该名称存储在某个变量中。我想用popen发送该文件进行打印。

#include <stdio.h>
#include "cv.h"
#include "highgui.h"

int main (int argc, char ** argv)
{
    int p[3];
    p[0] = CV_IMWRITE_JPEG_QUALITY;
    p[1] = 10;
    p[2] = 0;
    char name[10];
    IplImage* in = cvLoadImage("imagenoise1.jpg",3);
    IplImage* gray = cvCreateImage( cvSize(in->width, in->height),IPL_DEPTH_8U, 1 );
    cvCvtColor( in, gray, CV_BGR2GRAY );

    cvNamedWindow("in", CV_WINDOW_AUTOSIZE );
    cvNamedWindow("gray", CV_WINDOW_AUTOSIZE );
    cvShowImage("in",in);
    cvShowImage("gray",gray);
    printf("Con que nombre desea guardar la imagen en escala de grises ( no mas de 9 caracteres ):\n");
    scanf("%s", name);
    cvSaveImage( name, gray, p );
     FILE *pipe = popen("lp name","w");
    close(pipe);
    cvWaitKey(0);
    cvDestroyWindow( "in" );
    cvDestroyWindow( "gray" );
    cvReleaseImage( &in );
    cvReleaseImage( &gray );



    return 0;
}

所以我试图发送我之前提供的具体名称,但似乎没有任何效果,任何想法?,我想我错过了一些东西,因为发送一个不存在的文件。

2 个答案:

答案 0 :(得分:0)

您尝试打开 imagenoise1.jpg ,这不是用户提供的,也许这就是您收到FILE_NOT_FOUND异常的原因。

IplImage* in = cvLoadImage("imagenoise1.jpg",3);

我认为您应该以这种方式更改您的代码:

IplImage* in = cvLoadImage(argv[1], 3);

您应该通过传递参数来运行/调试您的应用程序: test.exe imagenoise.jpg

答案 1 :(得分:0)

这段代码对我很怀疑:

scanf("%s", name);
cvSaveImage( name, gray, p );
FILE *pipe = popen("lp name","w");

看起来你需要这样做:

if (scanf("%s", name) == 1)
{
    char cmd[256];
    snprintf(cmd, sizeof(cmd), "lp %s", name);
    system(cmd);
}

你既不向管道写任何内容也不从中读取任何内容,因此你不需要popen()system()如果不是更好也应该工作。