diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2021-03-30 10:59:39 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2021-04-01 00:04:14 +0200 |
commit | 5ff1d6955496b3cf9a35042c9ac35db43bc336b1 (patch) | |
tree | 6d470f7eb448f59f53e8df1010aec9dad8ce1f72 /leptonica/prog/expand_reg.c | |
parent | Import Ghostscript 9.53.1 (diff) | |
download | ghostscript-gpl-patches-5ff1d6955496b3cf9a35042c9ac35db43bc336b1.tar.gz ghostscript-gpl-patches-5ff1d6955496b3cf9a35042c9ac35db43bc336b1.tar.bz2 ghostscript-gpl-patches-5ff1d6955496b3cf9a35042c9ac35db43bc336b1.zip |
Import Ghostscript 9.54ghostscript-9.54
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'leptonica/prog/expand_reg.c')
-rw-r--r-- | leptonica/prog/expand_reg.c | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/leptonica/prog/expand_reg.c b/leptonica/prog/expand_reg.c new file mode 100644 index 00000000..3e99af17 --- /dev/null +++ b/leptonica/prog/expand_reg.c @@ -0,0 +1,165 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * expand_reg.c + * + * Regression test for replicative and power-of-2 expansion (and + * corresponding reductions) + */ + +#ifdef HAVE_CONFIG_H +#include <config_auto.h> +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +#define BINARY_IMAGE "test1.png" +#define TWO_BPP_IMAGE_NO_CMAP "weasel2.4g.png" +#define TWO_BPP_IMAGE_CMAP "weasel2.4c.png" +#define FOUR_BPP_IMAGE_NO_CMAP "weasel4.16g.png" +#define FOUR_BPP_IMAGE_CMAP "weasel4.16c.png" +#define EIGHT_BPP_IMAGE_NO_CMAP "weasel8.149g.png" +#define EIGHT_BPP_IMAGE_CMAP "weasel8.240c.png" +#define RGB_IMAGE "marge.jpg" + + +int main(int argc, + char **argv) +{ +l_int32 i, w, h, format; +char filename[][64] = {BINARY_IMAGE, + TWO_BPP_IMAGE_NO_CMAP, TWO_BPP_IMAGE_CMAP, + FOUR_BPP_IMAGE_NO_CMAP, FOUR_BPP_IMAGE_CMAP, + EIGHT_BPP_IMAGE_NO_CMAP, EIGHT_BPP_IMAGE_CMAP, + RGB_IMAGE}; +BOX *box; +PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; +PIXA *pixa; +L_REGPARAMS *rp; + + if (regTestSetup(argc, argv, &rp)) + return 1; + + pixa = pixaCreate(0); + for (i = 0; i < 8; i++) { + pixs = pixRead(filename[i]); + pix1 = pixExpandReplicate(pixs, 2); + format = (i == 7) ? IFF_JFIF_JPEG : IFF_PNG; + regTestWritePixAndCheck(rp, pix1, format); /* 0 - 7 */ + pixaAddPix(pixa, pix1, L_INSERT); + pixDestroy(&pixs); + } + for (i = 0; i < 8; i++) { + pixs = pixRead(filename[i]); + pix1 = pixExpandReplicate(pixs, 3); + format = (i == 7) ? IFF_JFIF_JPEG : IFF_PNG; + regTestWritePixAndCheck(rp, pix1, format); /* 8 - 15 */ + pixaAddPix(pixa, pix1, L_INSERT); + pixDestroy(&pixs); + } + + pixs = pixRead("test1.png"); + pixGetDimensions(pixs, &w, &h, NULL); + for (i = 1; i <= 15; i++) { + box = boxCreate(13 * i, 13 * i, w - 13 * i, h - 13 * i); + pix1 = pixClipRectangle(pixs, box, NULL); + pix2 = pixExpandReplicate(pix1, 3); + regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 16 - 30 */ + pixaAddPix(pixa, pix2, L_INSERT); + boxDestroy(&box); + pixDestroy(&pix1); + } + pixDestroy(&pixs); + + /* --------- Power of 2 expansion and reduction -------- */ + pixs = pixRead("speckle.png"); + + /* Test 2x expansion of 1 bpp */ + pix1 = pixExpandBinaryPower2(pixs, 2); + pix2 = pixReduceRankBinary2(pix1, 4, NULL); + regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 31 */ + regTestComparePix(rp, pixs, pix2); /* 32 */ + pixDestroy(&pix1); + pixDestroy(&pix2); + + /* Test 2x expansion of 2 bpp */ + pix1 = pixConvert1To2(NULL, pixs, 3, 0); + pix2 = pixExpandReplicate(pix1, 2); + pix3 = pixConvertTo8(pix2, FALSE); + pix4 = pixThresholdToBinary(pix3, 250); + regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 33 */ + pix5 = pixReduceRankBinary2(pix4, 4, NULL); + regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 34 */ + regTestComparePix(rp, pixs, pix5); /* 35 */ + pixaAddPix(pixa, pix5, L_INSERT); + pix6 = pixExpandBinaryPower2(pix5, 2); + regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 36 */ + pixaAddPix(pixa, pix6, L_INSERT); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix4); + + /* Test 4x expansion of 4 bpp */ + pix1 = pixConvert1To4(NULL, pixs, 15, 0); + pix2 = pixExpandReplicate(pix1, 4); + pix3 = pixConvertTo8(pix2, FALSE); + pix4 = pixThresholdToBinary(pix3, 250); + regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 37 */ + pixaAddPix(pixa, pix4, L_INSERT); + pix5 = pixReduceRankBinaryCascade(pix4, 4, 4, 0, 0); + regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 38 */ + regTestComparePix(rp, pixs, pix5); /* 39 */ + pixaAddPix(pixa, pix5, L_INSERT); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + + /* Test 8x expansion of 8 bpp */ + pix1 = pixConvertTo8(pixs, FALSE); + pix2 = pixExpandReplicate(pix1, 8); + pix3 = pixThresholdToBinary(pix2, 250); + regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 40 */ + pixaAddPix(pixa, pix3, L_INSERT); + pix4 = pixReduceRankBinaryCascade(pix3, 4, 4, 4, 0); + regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 41 */ + regTestComparePix(rp, pixs, pix4); /* 42 */ + pixaAddPix(pixa, pix4, L_INSERT); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pixs); + + if (rp->display) { + lept_stderr("Writing to: /tmp/lept/expand/test.pdf\n"); + pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "Replicative expansion", + "/tmp/lept/expand/test.pdf"); + } + pixaDestroy(&pixa); + + return regTestCleanup(rp); +} + |