1 /*====================================================================*
2  -  Copyright (C) 2001 Leptonica.  All rights reserved.
3  -
4  -  Redistribution and use in source and binary forms, with or without
5  -  modification, are permitted provided that the following conditions
6  -  are met:
7  -  1. Redistributions of source code must retain the above copyright
8  -     notice, this list of conditions and the following disclaimer.
9  -  2. Redistributions in binary form must reproduce the above
10  -     copyright notice, this list of conditions and the following
11  -     disclaimer in the documentation and/or other materials
12  -     provided with the distribution.
13  -
14  -  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
15  -  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
16  -  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
17  -  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ANY
18  -  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  -  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  -  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  -  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  -  OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
23  -  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  -  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *====================================================================*/
26 
27 /*
28  * pnmio_reg.c
29  *
30  *   Tests read and write of both ascii and packed pnm, using
31  *   pix with 1, 2, 4, 8 and 32 bpp.
32  */
33 
34 #include "allheaders.h"
35 
main(l_int32 argc,char ** argv)36 l_int32 main(l_int32  argc,
37              char   **argv)
38 {
39 FILE         *fp;
40 PIX          *pix1, *pix2, *pix3, *pix4, *pix5;
41 L_REGPARAMS  *rp;
42 
43     if (regTestSetup(argc, argv, &rp))
44         return 1;
45 
46     lept_rmdir("lept/pnm");
47     lept_mkdir("lept/pnm");
48 
49         /* Test 1 bpp (pbm) read/write */
50     pix1 = pixRead("char.tif");
51     fp = lept_fopen("/tmp/lept/pnm/pix1.1.pnm", "wb");
52     pixWriteStreamAsciiPnm(fp, pix1);
53     lept_fclose(fp);
54     pix2 = pixRead("/tmp/lept/pnm/pix1.1.pnm");
55     pixWrite("/tmp/lept/pnm/pix2.1.pnm", pix2, IFF_PNM);
56     pix3 = pixRead("/tmp/lept/pnm/pix2.1.pnm");
57     regTestComparePix(rp, pix1, pix3);  /* 0 */
58         /* write PAM */
59     fp = lept_fopen("/tmp/lept/pnm/pix3.1.pnm", "wb");
60     pixWriteStreamPam(fp, pix1);
61     lept_fclose(fp);
62     pix4 = pixRead("/tmp/lept/pnm/pix3.1.pnm");
63     regTestComparePix(rp, pix1, pix4);  /* 1 */
64     pixDestroy(&pix1);
65     pixDestroy(&pix2);
66     pixDestroy(&pix3);
67     pixDestroy(&pix4);
68 
69         /* Test 2, 4 and 8 bpp (pgm) read/write */
70     pix1 = pixRead("weasel8.png");
71     pix2 = pixThresholdTo2bpp(pix1, 4, 0);
72     fp = lept_fopen("/tmp/lept/pnm/pix2.2.pnm", "wb");
73     pixWriteStreamAsciiPnm(fp, pix2);
74     lept_fclose(fp);
75     pix3 = pixRead("/tmp/lept/pnm/pix2.2.pnm");
76     pixWrite("/tmp/lept/pnm/pix3.2.pnm", pix3, IFF_PNM);
77     pix4 = pixRead("/tmp/lept/pnm/pix3.2.pnm");
78     regTestComparePix(rp, pix2, pix4);  /* 2 */
79         /* write PAM */
80     fp = lept_fopen("/tmp/lept/pnm/pix4.2.pnm", "wb");
81     pixWriteStreamPam(fp, pix2);
82     lept_fclose(fp);
83     pix5 = pixRead("/tmp/lept/pnm/pix4.2.pnm");
84     regTestComparePix(rp, pix2, pix5);  /* 3 */
85     pixDestroy(&pix2);
86     pixDestroy(&pix3);
87     pixDestroy(&pix4);
88     pixDestroy(&pix5);
89 
90     pix2 = pixThresholdTo4bpp(pix1, 16, 0);
91     fp = lept_fopen("/tmp/lept/pnm/pix2.4.pnm", "wb");
92     pixWriteStreamAsciiPnm(fp, pix2);
93     lept_fclose(fp);
94     pix3 = pixRead("/tmp/lept/pnm/pix2.4.pnm");
95     pixWrite("/tmp/lept/pnm/pix3.4.pnm", pix3, IFF_PNM);
96     pix4 = pixRead("/tmp/lept/pnm/pix3.4.pnm");
97     regTestComparePix(rp, pix2, pix4);  /* 4 */
98         /* write PAM */
99     fp = lept_fopen("/tmp/lept/pnm/pix4.4.pnm", "wb");
100     pixWriteStreamPam(fp, pix2);
101     lept_fclose(fp);
102     pix5 = pixRead("/tmp/lept/pnm/pix4.4.pnm");
103     regTestComparePix(rp, pix2, pix5);  /* 5 */
104     pixDestroy(&pix2);
105     pixDestroy(&pix3);
106     pixDestroy(&pix4);
107     pixDestroy(&pix5);
108 
109     fp = lept_fopen("/tmp/lept/pnm/pix1.8.pnm", "wb");
110     pixWriteStreamAsciiPnm(fp, pix1);
111     lept_fclose(fp);
112     pix2 = pixRead("/tmp/lept/pnm/pix1.8.pnm");
113     pixWrite("/tmp/lept/pnm/pix2.8.pnm", pix2, IFF_PNM);
114     pix3 = pixRead("/tmp/lept/pnm/pix2.8.pnm");
115     regTestComparePix(rp, pix1, pix3);  /* 6 */
116         /* write PAM */
117     fp = lept_fopen("/tmp/lept/pnm/pix3.8.pnm", "wb");
118     pixWriteStreamPam(fp, pix1);
119     lept_fclose(fp);
120     pix4 = pixRead("/tmp/lept/pnm/pix3.8.pnm");
121     regTestComparePix(rp, pix1, pix4);  /* 7 */
122     pixDestroy(&pix1);
123     pixDestroy(&pix2);
124     pixDestroy(&pix3);
125     pixDestroy(&pix4);
126 
127         /* Test ppm (24 bpp rgb) read/write */
128     pix1 = pixRead("marge.jpg");
129     fp = lept_fopen("/tmp/lept/pnm/pix1.24.pnm", "wb");
130     pixWriteStreamAsciiPnm(fp, pix1);
131     lept_fclose(fp);
132     pix2 = pixRead("/tmp/lept/pnm/pix1.24.pnm");
133     pixWrite("/tmp/lept/pnm/pix2.24.pnm", pix2, IFF_PNM);
134     pix3 = pixRead("/tmp/lept/pnm/pix2.24.pnm");
135     regTestComparePix(rp, pix1, pix3);  /* 8 */
136         /* write PAM */
137     fp = lept_fopen("/tmp/lept/pnm/pix3.24.pnm", "wb");
138     pixWriteStreamPam(fp, pix1);
139     lept_fclose(fp);
140     pix4 = pixRead("/tmp/lept/pnm/pix3.24.pnm");
141     regTestComparePix(rp, pix1, pix4);  /* 9 */
142     pixDestroy(&pix1);
143     pixDestroy(&pix2);
144     pixDestroy(&pix3);
145     pixDestroy(&pix4);
146 
147         /* Test pam (32 bpp rgba) read/write */
148     pix1 = pixRead("test32-alpha.png");
149     fp = lept_fopen("/tmp/lept/pnm/pix1.32.pnm", "wb");
150     pixWriteStreamPam(fp, pix1);
151     lept_fclose(fp);
152     pix2 = pixRead("/tmp/lept/pnm/pix1.32.pnm");
153     pixWrite("/tmp/lept/pnm/pix2.32.pnm", pix2, IFF_PNM);
154     pix3 = pixRead("/tmp/lept/pnm/pix2.32.pnm");
155     regTestComparePix(rp, pix1, pix3);  /* 10 */
156     pixDestroy(&pix1);
157     pixDestroy(&pix2);
158     pixDestroy(&pix3);
159 
160     return regTestCleanup(rp);
161 }
162