您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ ERROR_PTR函数代码示例

51自学网 2021-06-01 20:33:27
  C++
这篇教程C++ ERROR_PTR函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中ERROR_PTR函数的典型用法代码示例。如果您正苦于以下问题:C++ ERROR_PTR函数的具体用法?C++ ERROR_PTR怎么用?C++ ERROR_PTR使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了ERROR_PTR函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: gplotRead

/*! *  gplotRead() *  *      Input:  filename *      Return: gplot, or NULL on error */GPLOT *gplotRead(const char  *filename){char     buf[L_BUF_SIZE];char    *rootname, *title, *xlabel, *ylabel;l_int32  outformat, ret, version;FILE    *fp;GPLOT   *gplot;    PROCNAME("gplotRead");    if (!filename)        return (GPLOT *)ERROR_PTR("filename not defined", procName, NULL);    if ((fp = fopen(filename, "r")) == NULL)        return (GPLOT *)ERROR_PTR("stream not opened", procName, NULL);    ret = fscanf(fp, "Gplot Version %d/n", &version);    if (ret != 1) {        fclose(fp);        return (GPLOT *)ERROR_PTR("not a gplot file", procName, NULL);    }    if (version != GPLOT_VERSION_NUMBER) {        fclose(fp);        return (GPLOT *)ERROR_PTR("invalid gplot version", procName, NULL);    }    fscanf(fp, "Rootname: %s/n", buf);    rootname = stringNew(buf);    fscanf(fp, "Output format: %d/n", &outformat);    fgets(buf, L_BUF_SIZE, fp);   /* Title: ... */    title = stringNew(buf + 7);    title[strlen(title) - 1] = '/0';    fgets(buf, L_BUF_SIZE, fp);   /* X axis label: ... */    xlabel = stringNew(buf + 14);    xlabel[strlen(xlabel) - 1] = '/0';    fgets(buf, L_BUF_SIZE, fp);   /* Y axis label: ... */    ylabel = stringNew(buf + 14);    ylabel[strlen(ylabel) - 1] = '/0';    if (!(gplot = gplotCreate(rootname, outformat, title, xlabel, ylabel))) {        fclose(fp);        return (GPLOT *)ERROR_PTR("gplot not made", procName, NULL);    }    FREE(rootname);    FREE(title);    FREE(xlabel);    FREE(ylabel);    sarrayDestroy(&gplot->cmddata);    sarrayDestroy(&gplot->datanames);    sarrayDestroy(&gplot->plotdata);    sarrayDestroy(&gplot->plottitles);    numaDestroy(&gplot->plotstyles);    fscanf(fp, "Commandfile name: %s/n", buf);    stringReplace(&gplot->cmdname, buf);    fscanf(fp, "/nCommandfile data:");    gplot->cmddata = sarrayReadStream(fp);    fscanf(fp, "/nDatafile names:");    gplot->datanames = sarrayReadStream(fp);    fscanf(fp, "/nPlot data:");    gplot->plotdata = sarrayReadStream(fp);    fscanf(fp, "/nPlot titles:");    gplot->plottitles = sarrayReadStream(fp);    fscanf(fp, "/nPlot styles:");    gplot->plotstyles = numaReadStream(fp);    fscanf(fp, "Number of plots: %d/n", &gplot->nplots);    fscanf(fp, "Output file name: %s/n", buf);    stringReplace(&gplot->outname, buf);    fscanf(fp, "Axis scaling: %d/n", &gplot->scaling);    fclose(fp);    return gplot;}
开发者ID:AbdelghaniDr,项目名称:mirror,代码行数:81,


示例2: sarrayMakeWplsCode

/*! *  sarrayMakeWplsCode() */static SARRAY *sarrayMakeWplsCode(SEL  *sel){char     emptystring[] = "";l_int32  i, j, ymax, dely, allvshifts;l_int32  vshift[32];SARRAY  *sa;    PROCNAME("sarrayMakeWplsCode");    if (!sel)        return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL);    for (i = 0; i < 32; i++)        vshift[i] = 0;    ymax = 0;    for (i = 0; i < sel->sy; i++) {        for (j = 0; j < sel->sx; j++) {            if (sel->data[i][j] == 1) {                dely = L_ABS(i - sel->cy);                if (dely < 32)                    vshift[dely] = 1;                ymax = L_MAX(ymax, dely);            }        }    }    if (ymax > 31) {        L_WARNING("ymax > 31; truncating to 31/n", procName);        ymax = 31;    }        /* Test if this is a vertical brick */    allvshifts = TRUE;    for (i = 0; i < ymax; i++) {        if (vshift[i] == 0) {            allvshifts = FALSE;            break;        }    }    if ((sa = sarrayCreate(0)) == NULL)        return (SARRAY *)ERROR_PTR("sa not made", procName, NULL);        /* Add declarations */    if (allvshifts == TRUE) {   /* packs them as well as possible */        if (ymax > 4)            sarrayAddString(sa, wpldecls[2], L_COPY);        if (ymax > 8)            sarrayAddString(sa, wpldecls[6], L_COPY);        if (ymax > 12)            sarrayAddString(sa, wpldecls[10], L_COPY);        if (ymax > 16)            sarrayAddString(sa, wpldecls[14], L_COPY);        if (ymax > 20)            sarrayAddString(sa, wpldecls[18], L_COPY);        if (ymax > 24)            sarrayAddString(sa, wpldecls[22], L_COPY);        if (ymax > 28)            sarrayAddString(sa, wpldecls[26], L_COPY);        if (ymax > 1)            sarrayAddString(sa, wpldecls[ymax - 2], L_COPY);    } else {  /* puts them one/line */        for (i = 2; i <= ymax; i++) {            if (vshift[i])                sarrayAddString(sa, wplgendecls[i - 2], L_COPY);        }    }    sarrayAddString(sa, emptystring, L_COPY);        /* Add definitions */    for (i = 2; i <= ymax; i++) {        if (vshift[i])            sarrayAddString(sa, wpldefs[i - 2], L_COPY);    }    return sa;}
开发者ID:AAAyag,项目名称:tess-two,代码行数:81,


示例3: pixTestDFTGray

PIX *pixTestDFTGray(PIX     *pixs,			   l_int32  shiftflag){	return (PIX *)ERROR_PTR("function not present", "pixTestDFTGray", NULL);}
开发者ID:Hurricane86,项目名称:ipl,代码行数:6,


示例4: boxaDisplayTiled

/*! * /brief   boxaDisplayTiled() * * /param[in]    boxas * /param[in]    pixa          [optional] background for each box * /param[in]    first         index of first box * /param[in]    last          index of last box; use -1 to go to end * /param[in]    maxwidth      of output image * /param[in]    linewidth     width of box outlines, before scaling * /param[in]    scalefactor   applied to every box; use 1.0 for no scaling * /param[in]    background    0 for white, 1 for black; this is the color *                             of the spacing between the images * /param[in]    spacing       between images, and on outside * /param[in]    border        width of black border added to each image; *                             use 0 for no border * /return  pixd of tiled images of boxes, or NULL on error * * <pre> * Notes: *      (1) Displays each box separately in a tiled 32 bpp image. *      (2) If pixa is defined, it must have the same count as the boxa, *          and it will be a background over with each box is rendered. *          If pixa is not defined, the boxes will be rendered over *          blank images of identical size. *      (3) See pixaDisplayTiledInRows() for other parameters. * </pre> */PIX *boxaDisplayTiled(BOXA        *boxas,                 PIXA        *pixa,                 l_int32      first,                 l_int32      last,                 l_int32      maxwidth,                 l_int32      linewidth,                 l_float32    scalefactor,                 l_int32      background,                 l_int32      spacing,                 l_int32      border){char     buf[32];l_int32  i, n, npix, w, h, fontsize;L_BMF   *bmf;BOX     *box;BOXA    *boxa;PIX     *pix1, *pix2, *pixd;PIXA    *pixat;    PROCNAME("boxaDisplayTiled");    if (!boxas)        return (PIX *)ERROR_PTR("boxas not defined", procName, NULL);    boxa = boxaSaveValid(boxas, L_COPY);    n = boxaGetCount(boxa);    if (pixa) {        npix = pixaGetCount(pixa);        if (n != npix) {            boxaDestroy(&boxa);            return (PIX *)ERROR_PTR("boxa and pixa counts differ",                                    procName, NULL);        }    }    first = L_MAX(0, first);    if (last < 0) last = n - 1;    if (first >= n) {        boxaDestroy(&boxa);        return (PIX *)ERROR_PTR("invalid first", procName, NULL);    }    if (last >= n) {        L_WARNING("last = %d is beyond max index = %d; adjusting/n",                  procName, last, n - 1);        last = n - 1;    }    if (first > last) {        boxaDestroy(&boxa);        return (PIX *)ERROR_PTR("first > last", procName, NULL);    }        /* Because the bitmap font will be reduced when tiled, choose the         * font size inversely with the scale factor. */    if (scalefactor > 0.8)        fontsize = 6;    else if (scalefactor > 0.6)        fontsize = 10;    else if (scalefactor > 0.4)        fontsize = 14;    else if (scalefactor > 0.3)        fontsize = 18;    else fontsize = 20;    bmf = bmfCreate(NULL, fontsize);    pixat = pixaCreate(n);    boxaGetExtent(boxa, &w, &h, NULL);    for (i = first; i <= last; i++) {        box = boxaGetBox(boxa, i, L_CLONE);        if (!pixa) {            pix1 = pixCreate(w, h, 32);            pixSetAll(pix1);        } else {            pix1 = pixaGetPix(pixa, i, L_COPY);//.........这里部分代码省略.........
开发者ID:pullmoll,项目名称:leptonica,代码行数:101,


示例5: pixReadStream

/*! *  pixReadStream() * *      Input:  fp (file stream) *              hint (bitwise OR of L_HINT_* values for jpeg; use 0 for no hint) *      Return: pix if OK; null on error * *  Notes: *      (1) The hint only applies to jpeg. */PIX *pixReadStream(FILE    *fp,              l_int32  hint){    l_int32   format, ret;    l_uint8  *comment;    PIX      *pix;    PROCNAME("pixReadStream");    if (!fp)        return (PIX *)ERROR_PTR("stream not defined", procName, NULL);    pix = NULL;    findFileFormatStream(fp, &format);    switch (format)    {    case IFF_BMP:        if ((pix = pixReadStreamBmp(fp)) == NULL )            return (PIX *)ERROR_PTR( "bmp: no pix returned", procName, NULL);        break;    case IFF_JFIF_JPEG:        if ((pix = pixReadStreamJpeg(fp, 0, 1, NULL, hint)) == NULL)            return (PIX *)ERROR_PTR( "jpeg: no pix returned", procName, NULL);        ret = fgetJpegComment(fp, &comment);        if (!ret && comment)            pixSetText(pix, (char *)comment);        FREE(comment);        break;    case IFF_PNG:        if ((pix = pixReadStreamPng(fp)) == NULL)            return (PIX *)ERROR_PTR("png: no pix returned", procName, NULL);        break;    case IFF_TIFF:    case IFF_TIFF_PACKBITS:    case IFF_TIFF_RLE:    case IFF_TIFF_G3:    case IFF_TIFF_G4:    case IFF_TIFF_LZW:    case IFF_TIFF_ZIP:        if ((pix = pixReadStreamTiff(fp, 0)) == NULL)  /* page 0 by default */            return (PIX *)ERROR_PTR("tiff: no pix returned", procName, NULL);        break;    case IFF_PNM:        if ((pix = pixReadStreamPnm(fp)) == NULL)            return (PIX *)ERROR_PTR("pnm: no pix returned", procName, NULL);        break;    case IFF_GIF:        if ((pix = pixReadStreamGif(fp)) == NULL)            return (PIX *)ERROR_PTR("gif: no pix returned", procName, NULL);        break;    case IFF_JP2:        if ((pix = pixReadStreamJp2k(fp, 1, NULL, 0, 0)) == NULL)            return (PIX *)ERROR_PTR("jp2: no pix returned", procName, NULL);        break;    case IFF_WEBP:        if ((pix = pixReadStreamWebP(fp)) == NULL)            return (PIX *)ERROR_PTR("webp: no pix returned", procName, NULL);        break;    case IFF_SPIX:        if ((pix = pixReadStreamSpix(fp)) == NULL)            return (PIX *)ERROR_PTR("spix: no pix returned", procName, NULL);        break;    case IFF_UNKNOWN:        return (PIX *)ERROR_PTR( "Unknown format: no pix returned",                                 procName, NULL);        break;    }    if (pix)        pixSetInputFormat(pix, format);    return pix;}
开发者ID:xmarston,项目名称:BillRecognizer,代码行数:92,


示例6: selaAddBasic

/*! *  selaAddBasic() * *      Input:  sela (<optional>) *      Return: sela with additional sels, or null on error * *  Notes: *      (1) Adds the following sels: *            - all linear (horiz, vert) brick sels that are *              necessary for decomposable sels up to size 63 *            - square brick sels up to size 10 *            - 4 diagonal sels */SELA *selaAddBasic(SELA  *sela){	SEL     *sel;	l_int32  i, size;	char     name[L_BUF_SIZE];	PROCNAME("selaAddBasic");	if (!sela) {		if ((sela = selaCreate(0)) == NULL)			return (SELA *)ERROR_PTR("sela not made", procName, NULL);	}	/*--------------------------------------------------------------*	 *             Linear horizontal and vertical sels              *	 *--------------------------------------------------------------*/	for (i = 0; i < num_linear; i++) {		size = basic_linear[i];		sel = selCreateBrick(1, size, 0, size / 2, 1);		snprintf(name, L_BUF_SIZE, "sel_%dh", size);		selaAddSel(sela, sel, name, 0);	}	for (i = 0; i < num_linear; i++) {		size = basic_linear[i];		sel = selCreateBrick(size, 1, size / 2, 0, 1);		snprintf(name, L_BUF_SIZE, "sel_%dv", size);		selaAddSel(sela, sel, name, 0);	}	/*-----------------------------------------------------------*	 *                      2-d Bricks                           *	 *-----------------------------------------------------------*/	for (i = 2; i <= 5; i++) {		sel = selCreateBrick(i, i, i / 2, i / 2, 1);		snprintf(name, L_BUF_SIZE, "sel_%d", i);		selaAddSel(sela, sel, name, 0);	}	/*-----------------------------------------------------------*	 *                        Diagonals                          *	 *-----------------------------------------------------------*/	/*  0c  1		1   0  */	sel = selCreateBrick(2, 2, 0, 0, 1);	selSetElement(sel, 0, 0, 0);	selSetElement(sel, 1, 1, 0);	selaAddSel(sela, sel, "sel_2dp", 0);	/*  1c  0		0   1   */	sel = selCreateBrick(2, 2, 0, 0, 1);	selSetElement(sel, 0, 1, 0);	selSetElement(sel, 1, 0, 0);	selaAddSel(sela, sel, "sel_2dm", 0);	/*  Diagonal, slope +, size 5 */	sel = selCreate(5, 5, "sel_5dp");	sel->cy = 2;	sel->cx = 2;	selSetElement(sel, 0, 4, 1);	selSetElement(sel, 1, 3, 1);	selSetElement(sel, 2, 2, 1);	selSetElement(sel, 3, 1, 1);	selSetElement(sel, 4, 0, 1);	selaAddSel(sela, sel, "sel_5dp", 0);	/*  Diagonal, slope -, size 5 */	sel = selCreate(5, 5, "sel_5dm");	sel->cy = 2;	sel->cx = 2;	selSetElement(sel, 0, 0, 1);	selSetElement(sel, 1, 1, 1);	selSetElement(sel, 2, 2, 1);	selSetElement(sel, 3, 3, 1);	selSetElement(sel, 4, 4, 1);	selaAddSel(sela, sel, "sel_5dm", 0);	return sela;}
开发者ID:peterlee2008,项目名称:leptonica,代码行数:93,


示例7: pixRunlengthTransform

/*! *  pixRunlengthTransform() * *      Input:   pixs (1 bpp) *               color (0 for white runs, 1 for black runs) *               direction (L_HORIZONTAL_RUNS, L_VERTICAL_RUNS) *               depth (8 or 16 bpp) *      Return:  pixd (8 or 16 bpp), or null on error * *  Notes: *      (1) The dest Pix is 8 or 16 bpp, with the pixel values *          equal to the runlength in which it is a member. *          The length is clipped to the max pixel value if necessary. *      (2) The color determines if we're labelling white or black runs. *      (3) A pixel that is not a member of the chosen color gets *          value 0; it belongs to a run of length 0 of the *          chosen color. *      (4) To convert for maximum dynamic range, either linear or *          log, use pixMaxDynamicRange(). */PIX *pixRunlengthTransform(PIX     *pixs,                      l_int32  color,                      l_int32  direction,                      l_int32  depth){l_int32    i, j, w, h, wpld, bufsize, maxsize, n;l_int32   *start, *end, *buffer;l_uint32  *datad, *lined;PIX       *pixt, *pixd;    PROCNAME("pixRunlengthTransform");    if (!pixs)        return (PIX *)ERROR_PTR("pixs not defined", procName, NULL);    if (pixGetDepth(pixs) != 1)        return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL);    if (depth != 8 && depth != 16)        return (PIX *)ERROR_PTR("depth must be 8 or 16 bpp", procName, NULL);    pixGetDimensions(pixs, &w, &h, NULL);    if (direction == L_HORIZONTAL_RUNS)        maxsize = 1 + w / 2;    else if (direction == L_VERTICAL_RUNS)        maxsize = 1 + h / 2;    else        return (PIX *)ERROR_PTR("invalid direction", procName, NULL);    bufsize = L_MAX(w, h);    if ((pixd = pixCreate(w, h, depth)) == NULL)        return (PIX *)ERROR_PTR("pixd not made", procName, NULL);    datad = pixGetData(pixd);    wpld = pixGetWpl(pixd);    if ((start = (l_int32 *)CALLOC(maxsize, sizeof(l_int32))) == NULL)        return (PIX *)ERROR_PTR("start not made", procName, NULL);    if ((end = (l_int32 *)CALLOC(maxsize, sizeof(l_int32))) == NULL)        return (PIX *)ERROR_PTR("end not made", procName, NULL);    if ((buffer = (l_int32 *)CALLOC(bufsize, sizeof(l_int32))) == NULL)        return (PIX *)ERROR_PTR("buffer not made", procName, NULL);        /* Use fg runs for evaluation */    if (color == 0)        pixt = pixInvert(NULL, pixs);    else        pixt = pixClone(pixs);    if (direction == L_HORIZONTAL_RUNS) {        for (i = 0; i < h; i++) {            pixFindHorizontalRuns(pixt, i, start, end, &n);            runlengthMembershipOnLine(buffer, w, depth, start, end, n);            lined = datad + i * wpld;            if (depth == 8) {                for (j = 0; j < w; j++)                    SET_DATA_BYTE(lined, j, buffer[j]);            } else {  /* depth == 16 */                for (j = 0; j < w; j++)                    SET_DATA_TWO_BYTES(lined, j, buffer[j]);            }        }    } else {  /* L_VERTICAL_RUNS */        for (j = 0; j < w; j++) {            pixFindVerticalRuns(pixt, j, start, end, &n);            runlengthMembershipOnLine(buffer, h, depth, start, end, n);            if (depth == 8) {                for (i = 0; i < h; i++) {                    lined = datad + i * wpld;                    SET_DATA_BYTE(lined, j, buffer[i]);                }            } else {  /* depth == 16 */                for (i = 0; i < h; i++) {                    lined = datad + i * wpld;                    SET_DATA_TWO_BYTES(lined, j, buffer[i]);                }            }        }    }    pixDestroy(&pixt);    FREE(start);//.........这里部分代码省略.........
开发者ID:0xkasun,项目名称:Dummy_Tes,代码行数:101,


示例8: pixaaDisplayByPixa

/*! *  pixaaDisplayByPixa() * *      Input:  pixaa *              xspace between pix in pixa *              yspace between pixa *              max width of output pix *      Return: pix, or null on error * *  Notes: *      (1) Displays each pixa on a line (or set of lines), *          in order from top to bottom.  Within each pixa, *          the pix are displayed in order from left to right. *      (2) The size of each pix in each pixa is assumed to be *          approximately equal to the size of the first pix in *          the pixa.  If this assumption is not correct, this *          function will not work properly. *      (3) This ignores the boxa of the pixaa. */PIX *pixaaDisplayByPixa(PIXAA   *pixaa,                   l_int32  xspace,                   l_int32  yspace,                   l_int32  maxw){l_int32  i, j, npixa, npix;l_int32  width, height, depth, nlines, lwidth;l_int32  x, y, w, h, w0, h0;PIX     *pixt, *pixd;PIXA    *pixa;    PROCNAME("pixaaDisplayByPixa");    if (!pixaa)        return (PIX *)ERROR_PTR("pixaa not defined", procName, NULL);        if ((npixa = pixaaGetCount(pixaa)) == 0)        return (PIX *)ERROR_PTR("no components", procName, NULL);        /* Get size of output pix.  The width is the minimum of the         * maxw and the largest pixa line width.  The height is whatever         * it needs to be to accommodate all pixa. */    height = 2 * yspace;    width = 0;    for (i = 0; i < npixa; i++) {        pixa = pixaaGetPixa(pixaa, i, L_CLONE);        npix = pixaGetCount(pixa);        pixt = pixaGetPix(pixa, 0, L_CLONE);        if (i == 0)            depth = pixGetDepth(pixt);        w = pixGetWidth(pixt);        lwidth = npix * (w + xspace);        nlines = (lwidth + maxw - 1) / maxw;        if (nlines > 1)            width = maxw;        else            width = L_MAX(lwidth, width);        height += nlines * (pixGetHeight(pixt) + yspace);        pixDestroy(&pixt);        pixaDestroy(&pixa);    }    if ((pixd = pixCreate(width, height, depth)) == NULL)        return (PIX *)ERROR_PTR("pixd not made", procName, NULL);        /* Now layout the pix by pixa */    y = yspace;    for (i = 0; i < npixa; i++) {        x = 0;        pixa = pixaaGetPixa(pixaa, i, L_CLONE);        npix = pixaGetCount(pixa);        for (j = 0; j < npix; j++) {            pixt = pixaGetPix(pixa, j, L_CLONE);            if (j == 0) {                w0 = pixGetWidth(pixt);                h0 = pixGetHeight(pixt);            }            w = pixGetWidth(pixt);            if (width == maxw && x + w >= maxw) {                x = 0;                y += h0 + yspace;            }            h = pixGetHeight(pixt);            pixRasterop(pixd, x, y, w, h, PIX_PAINT, pixt, 0, 0);            pixDestroy(&pixt);            x += w0 + xspace;        }        y += h0 + yspace;        pixaDestroy(&pixa);    }    return pixd;}
开发者ID:ONLYOFFICE,项目名称:core,代码行数:93,


示例9: pixThinGeneral

/*! *  pixThinGeneral() * *      Input:  pixs (1 bpp) *              type (L_THIN_FG, L_THIN_BG) *              sela (of Sels for parallel composite HMTs) *              maxiters (max number of iters allowed; use 0 to iterate *                        until completion) *      Return: pixd, or null on error * *  Notes: *      (1) See notes in pixThin().  That function chooses among *          the best of the Sels for thinning. *      (2) This is a general function that takes a Sela of HMTs *          that are used in parallel for thinning from each *          of four directions.  One iteration consists of four *          such parallel thins. */PIX *pixThinGeneral(PIX     *pixs,               l_int32  type,               SELA    *sela,               l_int32  maxiters){l_int32  i, j, r, nsels, same;PIXA    *pixahmt;PIX    **pixhmt;  /* array owned by pixahmt; do not destroy! */PIX     *pixd, *pixt;SEL     *sel, *selr;    PROCNAME("pixThinGeneral");    if (!pixs)        return (PIX *)ERROR_PTR("pixs not defined", procName, NULL);    if (pixGetDepth(pixs) != 1)        return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL);    if (type != L_THIN_FG && type != L_THIN_BG)        return (PIX *)ERROR_PTR("invalid fg/bg type", procName, NULL);    if (!sela)        return (PIX *)ERROR_PTR("sela not defined", procName, NULL);    if (maxiters == 0) maxiters = 10000;        /* Set up array of temp pix to hold hmts */    nsels = selaGetCount(sela);    pixahmt = pixaCreate(nsels);    for (i = 0; i < nsels; i++) {        pixt = pixCreateTemplate(pixs);        pixaAddPix(pixahmt, pixt, L_INSERT);    }    pixhmt = pixaGetPixArray(pixahmt);    if (!pixhmt)        return (PIX *)ERROR_PTR("pixhmt array not made", procName, NULL);#if  DEBUG_SELS    pixt = selaDisplayInPix(sela, 35, 3, 15, 4);    pixDisplayWithTitle(pixt, 100, 100, "allsels", 1);    pixDestroy(&pixt);#endif  /* DEBUG_SELS */        /* Set up initial image for fg thinning */    if (type == L_THIN_FG)        pixd = pixCopy(NULL, pixs);    else  /* bg thinning */        pixd = pixInvert(NULL, pixs);        /* Thin the fg, with up to maxiters iterations */    for (i = 0; i < maxiters; i++) {        pixt = pixCopy(NULL, pixd);  /* test for completion */        for (r = 0; r < 4; r++) {  /* over 90 degree rotations of Sels */            for (j = 0; j < nsels; j++) {  /* over individual sels in sela */                sel = selaGetSel(sela, j);  /* not a copy */                selr = selRotateOrth(sel, r);                pixHMT(pixhmt[j], pixd, selr);                selDestroy(&selr);                if (j > 0)                    pixOr(pixhmt[0], pixhmt[0], pixhmt[j]);  /* accum result */            }            pixSubtract(pixd, pixd, pixhmt[0]);  /* remove result */        }        pixEqual(pixd, pixt, &same);        pixDestroy(&pixt);        if (same) {            L_INFO("%d iterations to completion/n", procName, i);            break;        }    }    if (type == L_THIN_BG)        pixInvert(pixd, pixd);    pixaDestroy(&pixahmt);    return pixd;}
开发者ID:0ximDigital,项目名称:appsScanner,代码行数:93,


示例10: pixaDisplayTiledAndScaled

/*! *  pixaDisplayTiledAndScaled() * *      Input:  pixa *              outdepth (output depth: 1, 8 or 32 bpp) *              tilewidth (each pix is scaled to this width) *              ncols (number of tiles in each row) *              background (0 for white, 1 for black; this is the color *                 of the spacing between the images) *              spacing  (between images, and on outside) *              border (width of additional black border on each image; *                      use 0 for no border) *      Return: pix of tiled images, or null on error * *  Notes: *      (1) This can be used to tile a number of renderings of *          an image that are at different scales and depths. *      (2) Each image, after scaling and optionally adding the *          black border, has width 'tilewidth'.  Thus, the border does *          not affect the spacing between the image tiles.  The *          maximum allowed border width is tilewidth / 5. */PIX *pixaDisplayTiledAndScaled(PIXA    *pixa,                          l_int32  outdepth,                          l_int32  tilewidth,                          l_int32  ncols,                          l_int32  background,                          l_int32  spacing,                          l_int32  border){l_int32    x, y, w, h, wd, hd, d;l_int32    i, n, nrows, maxht, ninrow, irow, bordval;l_int32   *rowht;l_float32  scalefact;PIX       *pix, *pixn, *pixt, *pixb, *pixd;PIXA      *pixan;    PROCNAME("pixaDisplayTiledAndScaled");    if (!pixa)        return (PIX *)ERROR_PTR("pixa not defined", procName, NULL);    if (outdepth != 1 && outdepth != 8 && outdepth != 32)        return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL);    if (border < 0 || border > tilewidth / 5)        border = 0;        if ((n = pixaGetCount(pixa)) == 0)        return (PIX *)ERROR_PTR("no components", procName, NULL);        /* Normalize scale and depth for each pix; optionally add border */    pixan = pixaCreate(n);    bordval = (outdepth == 1) ? 1 : 0;    for (i = 0; i < n; i++) {        if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL)            continue;        pixGetDimensions(pix, &w, &h, &d);        scalefact = (l_float32)(tilewidth - 2 * border) / (l_float32)w;        if (d == 1 && outdepth > 1 && scalefact < 1.0)            pixt = pixScaleToGray(pix, scalefact);        else            pixt = pixScale(pix, scalefact, scalefact);        if (outdepth == 1)            pixn = pixConvertTo1(pixt, 128);        else if (outdepth == 8)            pixn = pixConvertTo8(pixt, FALSE);        else  /* outdepth == 32 */            pixn = pixConvertTo32(pixt);        pixDestroy(&pixt);        if (border)            pixb = pixAddBorder(pixn, border, bordval);        else            pixb = pixClone(pixn);        pixaAddPix(pixan, pixb, L_INSERT);        pixDestroy(&pix);        pixDestroy(&pixn);    }    if ((n = pixaGetCount(pixan)) == 0) { /* should not have changed! */        pixaDestroy(&pixan);        return (PIX *)ERROR_PTR("no components", procName, NULL);    }        /* Determine the size of each row and of pixd */    wd = tilewidth * ncols + spacing * (ncols + 1);    nrows = (n + ncols - 1) / ncols;    if ((rowht = (l_int32 *)CALLOC(nrows, sizeof(l_int32))) == NULL)        return (PIX *)ERROR_PTR("rowht array not made", procName, NULL);    maxht = 0;    ninrow = 0;    irow = 0;    for (i = 0; i < n; i++) {        pix = pixaGetPix(pixan, i, L_CLONE);        ninrow++;        pixGetDimensions(pix, &w, &h, NULL);        maxht = L_MAX(h, maxht);        if (ninrow == ncols) {//.........这里部分代码省略.........
开发者ID:ONLYOFFICE,项目名称:core,代码行数:101,


示例11: pixaaDisplay

/*! *  pixaaDisplay() * *      Input:  pixaa *              w, h (if set to 0, determines the size from the *                    b.b. of the components in pixaa) *      Return: pix, or null on error * *  Notes: *      (1) Each pix of the pixaa is displayed at the location given by *          its box, translated by the box of the containing pixa *          if it exists. */PIX *pixaaDisplay(PIXAA   *pixaa,             l_int32  w,             l_int32  h){l_int32  i, j, n, nbox, na, d, wmax, hmax, x, y, xb, yb, wb, hb;BOXA    *boxa1;  /* top-level boxa */BOXA    *boxa;PIX     *pixt, *pixd;PIXA    *pixa;    PROCNAME("pixaaDisplay");    if (!pixaa)        return (PIX *)ERROR_PTR("pixaa not defined", procName, NULL);        n = pixaaGetCount(pixaa);    if (n == 0)        return (PIX *)ERROR_PTR("no components", procName, NULL);        /* If w and h not input, determine the minimum size required         * to contain the origin and all c.c. */    boxa1 = pixaaGetBoxa(pixaa, L_CLONE);    nbox = boxaGetCount(boxa1);    if (w == 0 || h == 0) {        if (nbox == n)            boxaGetExtent(boxa1, &w, &h, NULL);        else {  /* have to use the lower-level boxa for each pixa */            wmax = hmax = 0;            for (i = 0; i < n; i++) {                pixa = pixaaGetPixa(pixaa, i, L_CLONE);                boxa = pixaGetBoxa(pixa, L_CLONE);                boxaGetExtent(boxa, &w, &h, NULL);                wmax = L_MAX(wmax, w);                hmax = L_MAX(hmax, h);                pixaDestroy(&pixa);                boxaDestroy(&boxa);            }            w = wmax;            h = hmax;        }    }        /* Get depth from first pix */    pixa = pixaaGetPixa(pixaa, 0, L_CLONE);    pixt = pixaGetPix(pixa, 0, L_CLONE);    d = pixGetDepth(pixt);    pixaDestroy(&pixa);    pixDestroy(&pixt);    if ((pixd = pixCreate(w, h, d)) == NULL)        return (PIX *)ERROR_PTR("pixd not made", procName, NULL);        x = y = 0;    for (i = 0; i < n; i++) {        pixa = pixaaGetPixa(pixaa, i, L_CLONE);        if (nbox == n)            boxaGetBoxGeometry(boxa1, i, &x, &y, NULL, NULL);        na = pixaGetCount(pixa);        for (j = 0; j < na; j++) {            pixaGetBoxGeometry(pixa, j, &xb, &yb, &wb, &hb);            pixt = pixaGetPix(pixa, j, L_CLONE);            pixRasterop(pixd, x + xb, y + yb, wb, hb, PIX_PAINT, pixt, 0, 0);            pixDestroy(&pixt);        }        pixaDestroy(&pixa);    }    boxaDestroy(&boxa1);    return pixd;}
开发者ID:ONLYOFFICE,项目名称:core,代码行数:84,


示例12: pixaDisplayTiledInRows

/*! *  pixaDisplayTiledInRows() * *      Input:  pixa *              outdepth (output depth: 1, 8 or 32 bpp) *              maxwidth (of output image) *              scalefactor (applied to every pix; use 1.0 for no scaling) *              background (0 for white, 1 for black; this is the color *                 of the spacing between the images) *              spacing  (between images, and on outside) *              border (width of black border added to each image; *                      use 0 for no border) *      Return: pixd (of tiled images), or null on error * *  Notes: *      (1) This saves a pixa to a single image file of width not to *          exceed maxwidth, with background color either white or black, *          and with each row tiled such that the top of each pix is *          aligned and separated by 'spacing' from the next one. *          A black border can be added to each pix. *      (2) All pix are converted to outdepth; existing colormaps are removed. *      (3) This does a reasonably spacewise-efficient job of laying *          out the individual pix images into a tiled composite. */PIX *pixaDisplayTiledInRows(PIXA      *pixa,                       l_int32    outdepth,                       l_int32    maxwidth,                       l_float32  scalefactor,                       l_int32    background,                       l_int32    spacing,                       l_int32    border){l_int32  h;  /* cumulative height over all the rows */l_int32  w;  /* cumulative height in the current row */l_int32  bordval, wtry, wt, ht;l_int32  irow;  /* index of current pix in current row */l_int32  wmaxrow;  /* width of the largest row */l_int32  maxh;  /* max height in row */l_int32  i, j, index, n, x, y, nrows, ninrow;NUMA    *nainrow;  /* number of pix in the row */NUMA    *namaxh;  /* height of max pix in the row */PIX     *pix, *pixn, *pixt, *pixd;PIXA    *pixan;    PROCNAME("pixaDisplayTiledInRows");    if (!pixa)        return (PIX *)ERROR_PTR("pixa not defined", procName, NULL);    if (outdepth != 1 && outdepth != 8 && outdepth != 32)        return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL);    if (border < 0)        border = 0;    if (scalefactor <= 0.0) scalefactor = 1.0;        if ((n = pixaGetCount(pixa)) == 0)        return (PIX *)ERROR_PTR("no components", procName, NULL);        /* Normalize depths, scale, remove colormaps; optionally add border */    pixan = pixaCreate(n);    bordval = (outdepth == 1) ? 1 : 0;    for (i = 0; i < n; i++) {        if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL)            continue;        if (outdepth == 1)            pixn = pixConvertTo1(pix, 128);        else if (outdepth == 8)            pixn = pixConvertTo8(pix, FALSE);        else  /* outdepth == 32 */            pixn = pixConvertTo32(pix);        pixDestroy(&pix);        if (scalefactor != 1.0)            pixt = pixScale(pixn, scalefactor, scalefactor);        else            pixt = pixClone(pixn);        if (border)            pixd = pixAddBorder(pixt, border, bordval);        else            pixd = pixClone(pixt);        pixDestroy(&pixn);        pixDestroy(&pixt);        pixaAddPix(pixan, pixd, L_INSERT);    }    if (pixaGetCount(pixan) != n) {        n = pixaGetCount(pixan);        L_WARNING_INT("only got %d components", procName, n);        if (n == 0) {            pixaDestroy(&pixan);            return (PIX *)ERROR_PTR("no components", procName, NULL);        }    }        /* Compute parameters for layout */    nainrow = numaCreate(0);    namaxh = numaCreate(0);    wmaxrow = 0;    w = h = spacing;//.........这里部分代码省略.........
开发者ID:ONLYOFFICE,项目名称:core,代码行数:101,


示例13: pixaDisplayTiled

/*! *  pixaDisplayTiled() * *      Input:  pixa *              maxwidth (of output image) *              background (0 for white, 1 for black) *              spacing *      Return: pix of tiled images, or null on error * *  Notes: *      (1) This saves a pixa to a single image file of width not to *          exceed maxwidth, with background color either white or black, *          and with each subimage spaced on a regular lattice. *      (2) The lattice size is determined from the largest width and height, *          separately, of all pix in the pixa. *      (3) All pix in the pixa must be of equal depth. *      (4) If any pix has a colormap, all pix are rendered in rgb. *      (5) Careful: because no components are omitted, this is *          dangerous if there are thousands of small components and *          one or more very large one, because the size of the *          resulting pix can be huge! */PIX *pixaDisplayTiled(PIXA    *pixa,                 l_int32  maxwidth,                 l_int32  background,                 l_int32  spacing){l_int32  w, h, wmax, hmax, wd, hd, d, hascmap;l_int32  i, j, n, ni, ncols, nrows;l_int32  ystart, xstart, wt, ht;PIX     *pix, *pixt, *pixd;PIXA    *pixat;    PROCNAME("pixaDisplayTiled");    if (!pixa)        return (PIX *)ERROR_PTR("pixa not defined", procName, NULL);        /* If any pix have colormaps, generate rgb */    if ((n = pixaGetCount(pixa)) == 0)        return (PIX *)ERROR_PTR("no components", procName, NULL);    pixaAnyColormaps(pixa, &hascmap);    if (hascmap) {        pixat = pixaCreate(n);        for (i = 0; i < n; i++) {            pixt = pixaGetPix(pixa, i, L_CLONE);            pix = pixConvertTo32(pixt);            pixaAddPix(pixat, pix, L_INSERT);            pixDestroy(&pixt);        }    }    else        pixat = pixaCopy(pixa, L_CLONE);        /* Find the largest width and height of the subimages */    wmax = hmax = 0;    for (i = 0; i < n; i++) {        pix = pixaGetPix(pixat, i, L_CLONE);        pixGetDimensions(pix, &w, &h, NULL);        if (i == 0)            d = pixGetDepth(pix);        else if (d != pixGetDepth(pix)) {            pixDestroy(&pix);            pixaDestroy(&pixat);            return (PIX *)ERROR_PTR("depths not equal", procName, NULL);        }        if (w > wmax)            wmax = w;        if (h > hmax)            hmax = h;        pixDestroy(&pix);    }        /* Get the number of rows and columns and the output image size */    spacing = L_MAX(spacing, 0);    ncols = (l_int32)((l_float32)(maxwidth - spacing) /                      (l_float32)(wmax + spacing));    nrows = (n + ncols - 1) / ncols;    wd = wmax * ncols + spacing * (ncols + 1);    hd = hmax * nrows + spacing * (nrows + 1);    if ((pixd = pixCreate(wd, hd, d)) == NULL) {        pixaDestroy(&pixat);	return (PIX *)ERROR_PTR("pixd not made", procName, NULL);    }#if 0    fprintf(stderr, " nrows = %d, ncols = %d, wmax = %d, hmax = %d/n",            nrows, ncols, wmax, hmax);    fprintf(stderr, " space = %d, wd = %d, hd = %d, n = %d/n",            space, wd, hd, n);#endif        /* Reset the background color if necessary */    if ((background == 1 && d == 1) || (background == 0 && d != 1))        pixSetAll(pixd);        /* Blit the images to the dest */    for (i = 0, ni = 0; i < nrows; i++) {        ystart = spacing + i * (hmax + spacing);//.........这里部分代码省略.........
开发者ID:ONLYOFFICE,项目名称:core,代码行数:101,


示例14: pixaDisplayOnLattice

/*! *  pixaDisplayOnLattice() * *      Input:  pixa *              xspace *              yspace *      Return: pix of composite images, or null on error * *  Notes: *      (1) This places each pix on sequentially on a regular lattice *          in the rendered composite.  If a pix is too large to fit in the *          allocated lattice space, it is not rendered. *      (2) If any pix has a colormap, all pix are rendered in rgb. *      (3) This is useful when putting bitmaps of components, *          such as characters, into a single image. */PIX *pixaDisplayOnLattice(PIXA    *pixa,                     l_int32  xspace,                     l_int32  yspace){l_int32  n, nw, nh, w, h, d, wt, ht;l_int32  index, i, j, hascmap;PIX     *pix, *pixt, *pixd;PIXA    *pixat;    PROCNAME("pixaDisplayOnLattice");    if (!pixa)        return (PIX *)ERROR_PTR("pixa not defined", procName, NULL);            /* If any pix have colormaps, generate rgb */    if ((n = pixaGetCount(pixa)) == 0)        return (PIX *)ERROR_PTR("no components", procName, NULL);    pixaAnyColormaps(pixa, &hascmap);    if (hascmap) {        pixat = pixaCreate(n);        for (i = 0; i < n; i++) {            pixt = pixaGetPix(pixa, i, L_CLONE);            pix = pixConvertTo32(pixt);            pixaAddPix(pixat, pix, L_INSERT);            pixDestroy(&pixt);        }    }    else        pixat = pixaCopy(pixa, L_CLONE);    nw = (l_int32)sqrt((l_float64)n);    nh = (n + nw - 1) / nw;    w = xspace * nw;    h = yspace * nh;        /* Use the first pix in pixa to determine the depth.  */    pixaGetPixDimensions(pixat, 0, NULL, NULL, &d);    if ((pixd = pixCreate(w, h, d)) == NULL) {        pixaDestroy(&pixat);        return (PIX *)ERROR_PTR("pixd not made", procName, NULL);    }        index = 0;    for (i = 0; i < nh; i++) {        for (j = 0; j < nw && index < n; j++, index++) {            pixt = pixaGetPix(pixat, index, L_CLONE);            pixGetDimensions(pixt, &wt, &ht, NULL);            if (wt > xspace || ht > yspace) {                fprintf(stderr, "pix(%d) omitted; size %dx%d/n", index, wt, ht);                pixDestroy(&pixt);                continue;            }            pixRasterop(pixd, j * xspace, i * yspace, wt, ht,                         PIX_PAINT, pixt, 0, 0);            pixDestroy(&pixt);        }    }    pixaDestroy(&pixat);    return pixd;}
开发者ID:ONLYOFFICE,项目名称:core,代码行数:79,


示例15: selaAddHitMiss

/*! *  selaAddHitMiss() * *      Input:  sela  (<optional>) *      Return: sela with additional sels, or null on error */SELA *selaAddHitMiss(SELA  *sela){SEL  *sel;    PROCNAME("selaAddHitMiss");    if (!sela) {        if ((sela = selaCreate(0)) == NULL)            return (SELA *)ERROR_PTR("sela not made", procName, NULL);    }#if 0   /*  use just for testing */    sel = selCreateBrick(3, 3, 1, 1, 2);    selaAddSel(sela, sel, "sel_bad", 0);#endif    /*--------------------------------------------------------------*     *                   Isolated foreground pixel                  *     *--------------------------------------------------------------*/    sel = selCreateBrick(3, 3, 1, 1, SEL_MISS);    selSetElement(sel, 1, 1, SEL_HIT);    selaAddSel(sela, sel, "sel_3hm", 0);    /*--------------------------------------------------------------*     *                Horizontal and vertical edges                 *     *--------------------------------------------------------------*/    sel = selCreateBrick(2, 3, 0, 1, SEL_HIT);    selSetElement(sel, 1, 0, SEL_MISS);    selSetElement(sel, 1, 1, SEL_MISS);    selSetElement(sel, 1, 2, SEL_MISS);    selaAddSel(sela, sel, "sel_3de", 0);    sel = selCreateBrick(2, 3, 1, 1, SEL_HIT);    selSetElement(sel, 0, 0, SEL_MISS);    selSetElement(sel, 0, 1, SEL_MISS);    selSetElement(sel, 0, 2, SEL_MISS);    selaAddSel(sela, sel, "sel_3ue", 0);    sel = selCreateBrick(3, 2, 1, 0, SEL_HIT);    selSetElement(sel, 0, 1, SEL_MISS);    selSetElement(sel, 1, 1, SEL_MISS);    selSetElement(sel, 2, 1, SEL_MISS);    selaAddSel(sela, sel, "sel_3re", 0);    sel = selCreateBrick(3, 2, 1, 1, SEL_HIT);    selSetElement(sel, 0, 0, SEL_MISS);    selSetElement(sel, 1, 0, SEL_MISS);    selSetElement(sel, 2, 0, SEL_MISS);    selaAddSel(sela, sel, "sel_3le", 0);    /*--------------------------------------------------------------*     *                        Slanted edge                          *     *--------------------------------------------------------------*/    sel = selCreateBrick(13, 6, 6, 2, SEL_DONT_CARE);    selSetElement(sel, 0, 3, SEL_MISS);    selSetElement(sel, 0, 5, SEL_HIT);    selSetElement(sel, 4, 2, SEL_MISS);    selSetElement(sel, 4, 4, SEL_HIT);    selSetElement(sel, 8, 1, SEL_MISS);    selSetElement(sel, 8, 3, SEL_HIT);    selSetElement(sel, 12, 0, SEL_MISS);    selSetElement(sel, 12, 2, SEL_HIT);    selaAddSel(sela, sel, "sel_sl1", 0);    /*--------------------------------------------------------------*     *                           Corners                            *     *  This allows for up to 3 missing edge pixels at the corner   *     *--------------------------------------------------------------*/    sel = selCreateBrick(4, 4, 1, 1, SEL_MISS);    selSetElement(sel, 1, 1, SEL_DONT_CARE);    selSetElement(sel, 1, 2, SEL_DONT_CARE);    selSetElement(sel, 2, 1, SEL_DONT_CARE);    selSetElement(sel, 1, 3, SEL_HIT);    selSetElement(sel, 2, 2, SEL_HIT);    selSetElement(sel, 2, 3, SEL_HIT);    selSetElement(sel, 3, 1, SEL_HIT);    selSetElement(sel, 3, 2, SEL_HIT);    selSetElement(sel, 3, 3, SEL_HIT);    selaAddSel(sela, sel, "sel_ulc", 0);    sel = selCreateBrick(4, 4, 1, 2, SEL_MISS);    selSetElement(sel, 1, 1, SEL_DONT_CARE);    selSetElement(sel, 1, 2, SEL_DONT_CARE);    selSetElement(sel, 2, 2, SEL_DONT_CARE);    selSetElement(sel, 1, 0, SEL_HIT);    selSetElement(sel, 2, 0, SEL_HIT);    selSetElement(sel, 2, 1, SEL_HIT);    selSetElement(sel, 3, 0, SEL_HIT);    selSetElement(sel, 3, 1, SEL_HIT);    selSetElement(sel, 3, 2, SEL_HIT);    selaAddSel(sela, sel, "sel_urc", 0);//.........这里部分代码省略.........
开发者ID:peterlee2008,项目名称:leptonica,代码行数:101,


示例16: pixThinExamples

/*! *  pixThinExamples() * *      Input:  pixs (1 bpp) *              type (L_THIN_FG, L_THIN_BG) *              index (into specific examples; valid 1-9; see notes) *              maxiters (max number of iters allowed; use 0 to iterate *                        until completion) *              selfile (<optional> filename for output sel display) *      Return: pixd, or null on error * *  Notes: *      (1) See notes in pixThin().  The examples are taken from *          the paper referenced there. *      (2) Here we allow specific sets of HMTs to be used in *          parallel for thinning from each of four directions. *          One iteration consists of four such parallel thins. *      (3) The examples are indexed as follows: *          Thinning  (e.g., run to completion): *              index = 1     sel_4_1, sel_4_5, sel_4_6 *              index = 2     sel_4_1, sel_4_7, sel_4_7_rot *              index = 3     sel_48_1, sel_48_1_rot, sel_48_2 *              index = 4     sel_8_2, sel_8_3, sel_48_2 *              index = 5     sel_8_1, sel_8_5, sel_8_6 *              index = 6     sel_8_2, sel_8_3, sel_8_8, sel_8_9 *              index = 7     sel_8_5, sel_8_6, sel_8_7, sel_8_7_rot *          Thickening: *              index = 8     sel_4_2, sel_4_3 (e.g,, do just a few iterations) *              index = 9     sel_8_4 (e.g., do just a few iterations) */PIX *pixThinExamples(PIX         *pixs,                l_int32      type,                l_int32      index,                l_int32      maxiters,                const char  *selfile){PIX   *pixd, *pixt;SEL   *sel;SELA  *sela;    PROCNAME("pixThinExamples");    if (!pixs)        return (PIX *)ERROR_PTR("pixs not defined", procName, NULL);    if (pixGetDepth(pixs) != 1)        return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL);    if (type != L_THIN_FG && type != L_THIN_BG)        return (PIX *)ERROR_PTR("invalid fg/bg type", procName, NULL);    if (index < 1 || index > 9)        return (PIX *)ERROR_PTR("invalid index", procName, NULL);    if (maxiters == 0) maxiters = 10000;    switch(index)    {    case 1:        sela = selaCreate(3);        sel = selCreateFromString(sel_4_1, 3, 3, "sel_4_1");        selaAddSel(sela, sel, NULL, 0);        sel = selCreateFromString(sel_4_5, 3, 3, "sel_4_5");        selaAddSel(sela, sel, NULL, 0);        sel = selCreateFromString(sel_4_6, 3, 3, "sel_4_6");        selaAddSel(sela, sel, NULL, 0);        break;    case 2:        sela = selaCreate(3);        sel = selCreateFromString(sel_4_1, 3, 3, "sel_4_1");        selaAddSel(sela, sel, NULL, 0);        sel = selCreateFromString(sel_4_7, 3, 3, "sel_4_7");        selaAddSel(sela, sel, NULL, 0);	sel = selRotateOrth(sel, 1);        selaAddSel(sela, sel, "sel_4_7_rot", 0);        break;    case 3:        sela = selaCreate(3);        sel = selCreateFromString(sel_48_1, 3, 3, "sel_48_1");        selaAddSel(sela, sel, NULL, 0);	sel = selRotateOrth(sel, 1);        selaAddSel(sela, sel, "sel_48_1_rot", 0);        sel = selCreateFromString(sel_48_2, 3, 3, "sel_48_2");        selaAddSel(sela, sel, NULL, 0);        break;    case 4:        sela = selaCreate(3);        sel = selCreateFromString(sel_8_2, 3, 3, "sel_8_2");        selaAddSel(sela, sel, NULL, 0);        sel = selCreateFromString(sel_8_3, 3, 3, "sel_8_3");        selaAddSel(sela, sel, NULL, 0);        sel = selCreateFromString(sel_48_2, 3, 3, "sel_48_2");        selaAddSel(sela, sel, NULL, 0);        break;    case 5:        sela = selaCreate(3);        sel = selCreateFromString(sel_8_1, 3, 3, "sel_8_1");        selaAddSel(sela, sel, NULL, 0);        sel = selCreateFromString(sel_8_5, 3, 3, "sel_8_5");        selaAddSel(sela, sel, NULL, 0);        sel = selCreateFromString(sel_8_6, 3, 3, "sel_8_6");        selaAddSel(sela, sel, NULL, 0);        break;//.........这里部分代码省略.........
开发者ID:0ximDigital,项目名称:appsScanner,代码行数:101,


示例17: selaAddTJunctions

/*! *  selaAddTJunctions() * *      Input:  sela (<optional>) *              hlsize (length of each line of hits from origin) *              mdist (distance of misses from the origin) *              norient (number of orientations; max of 8) *              debugflag (1 for debug output) *      Return: sela with additional sels, or null on error * *  Notes: *      (1) Adds hitmiss Sels for the T-junction of two lines. *          If the lines are very thin, they must be nearly orthogonal *          to register. *      (2) The number of Sels generated is 4 * @norient. *      (3) It is suggested that @hlsize be chosen at least 1 greater *          than @mdist.  Try values of (@hlsize, @mdist) such as *          (6,5), (7,6), (8,7), (9,7), etc. */SELA *selaAddTJunctions(SELA      *sela,                  l_float32  hlsize,                  l_float32  mdist,                  l_int32    norient,                  l_int32    debugflag){char       name[L_BUF_SIZE];l_int32    i, j, k, w, xc, yc;l_float64  pi, halfpi, radincr, jang, radang;l_float64  angle[3], dist[3];PIX       *pixc, *pixm, *pixt;PIXA      *pixa;PTA       *pta1, *pta2, *pta3;SEL       *sel;    PROCNAME("selaAddTJunctions");    if (hlsize <= 2)        return (SELA *)ERROR_PTR("hlsizel not > 1", procName, NULL);    if (norient < 1 || norient > 8)        return (SELA *)ERROR_PTR("norient not in [1, ... 8]", procName, NULL);    if (!sela) {        if ((sela = selaCreate(0)) == NULL)            return (SELA *)ERROR_PTR("sela not made", procName, NULL);    }    pi = 3.1415926535;    halfpi = 3.1415926535 / 2.0;    radincr = halfpi / (l_float32)norient;    w = (l_int32)(2.4 * (L_MAX(hlsize, mdist) + 0.5));    if (w % 2 == 0)        w++;    xc = w / 2;    yc = w / 2;    pixa = pixaCreate(4 * norient);    for (i = 0; i < norient; i++) {        for (j = 0; j < 4; j++) {  /* 4 orthogonal orientations */            jang = (l_float32)j * halfpi;                /* Set the don't cares */            pixc = pixCreate(w, w, 32);            pixSetAll(pixc);                /* Add the green lines of hits */            pixm = pixCreate(w, w, 1);            radang = (l_float32)i * radincr;            pta1 = generatePtaLineFromPt(xc, yc, hlsize + 1, jang + radang);            pta2 = generatePtaLineFromPt(xc, yc, hlsize + 1,                                         jang + radang + halfpi);            pta3 = generatePtaLineFromPt(xc, yc, hlsize + 1,                                         jang + radang + pi);            ptaJoin(pta1, pta2, 0, -1);            ptaJoin(pta1, pta3, 0, -1);            pixRenderPta(pixm, pta1, L_SET_PIXELS);            pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000);            ptaDestroy(&pta1);            ptaDestroy(&pta2);            ptaDestroy(&pta3);                /* Add red misses between the lines */            angle[0] = radang + jang - halfpi;            angle[1] = radang + jang + 0.5 * halfpi;            angle[2] = radang + jang + 1.5 * halfpi;            dist[0] = 0.8 * mdist;            dist[1] = dist[2] = mdist;            for (k = 0; k < 3; k++) {                pixSetPixel(pixc, xc + (l_int32)(dist[k] * cos(angle[k])),                            yc + (l_int32)(dist[k] * sin(angle[k])),                            0xff000000);            }                /* Add dark green for origin */            pixSetPixel(pixc, xc, yc, 0x00550000);                /* Generate the sel */            sel = selCreateFromColorPix(pixc, NULL);            sprintf(name, "sel_cross_%d", 4 * i + j);            selaAddSel(sela, sel, name, 0);//.........这里部分代码省略.........
开发者ID:peterlee2008,项目名称:leptonica,代码行数:101,


示例18: jbWordsInTextlines

/*! *  jbWordsInTextlines() * *      Input:  dirin (directory of input pages) *              reduction (1 for full res; 2 for half-res) *              maxwidth (of word mask components, to be kept) *              maxheight (of word mask components, to be kept) *              thresh (on correlation; 0.80 is reasonable) *              weight (for handling thick text; 0.6 is reasonable) *              natl (<return> numa with textline index for each component) *              firstpage (0-based) *              npages (use 0 for all pages in dirin) *      Return: classer (for the set of pages) * *  Notes: *      (1) This is a high-level function.  See prog/jbwords for example *          of usage. *      (2) Typically, words can be found reasonably well at a resolution *          of about 150 ppi.  For highest accuracy, you should use 300 ppi. *          Assuming that the input images are 300 ppi, use reduction = 1 *          for finding words at full res, and reduction = 2 for finding *          them at 150 ppi. */JBCLASSER *jbWordsInTextlines(const char  *dirin,                   l_int32      reduction,                   l_int32      maxwidth,                   l_int32      maxheight,                   l_float32    thresh,                   l_float32    weight,                   NUMA       **pnatl,                   l_int32      firstpage,                   l_int32      npages){char       *fname;l_int32     nfiles, i, w, h;BOXA       *boxa;JBCLASSER  *classer;NUMA       *nai, *natl;PIX        *pix;PIXA       *pixa;SARRAY     *safiles;    PROCNAME("jbWordsInTextlines");    if (!pnatl)        return (JBCLASSER *)ERROR_PTR("&natl not defined", procName, NULL);    *pnatl = NULL;    if (!dirin)        return (JBCLASSER *)ERROR_PTR("dirin not defined", procName, NULL);    if (reduction != 1 && reduction != 2)        return (JBCLASSER *)ERROR_PTR("reduction not in {1,2}", procName, NULL);    safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages);    nfiles = sarrayGetCount(safiles);        /* Classify components */    classer = jbCorrelationInit(JB_WORDS, maxwidth, maxheight, thresh, weight);    classer->safiles = sarrayCopy(safiles);    natl = numaCreate(0);    *pnatl = natl;    for (i = 0; i < nfiles; i++) {        fname = sarrayGetString(safiles, i, 0);        if ((pix = pixRead(fname)) == NULL) {            L_WARNING("image file %d not read/n", procName, i);            continue;        }        pixGetDimensions(pix, &w, &h, NULL);        if (reduction == 1) {            classer->w = w;            classer->h = h;        } else {  /* reduction == 2 */            classer->w = w / 2;            classer->h = h / 2;        }        pixGetWordsInTextlines(pix, reduction, JB_WORDS_MIN_WIDTH,                               JB_WORDS_MIN_HEIGHT, maxwidth, maxheight,                               &boxa, &pixa, &nai);        jbAddPageComponents(classer, pix, boxa, pixa);        numaJoin(natl, nai, 0, -1);        pixDestroy(&pix);        numaDestroy(&nai);        boxaDestroy(&boxa);        pixaDestroy(&pixa);    }    sarrayDestroy(&safiles);    return classer;}
开发者ID:peterlee2008,项目名称:leptonica,代码行数:89,


示例19: pixReadStreamGif

/*! *  pixReadStreamGif() * *      Input:  stream *      Return: pix, or null on error */PIX *pixReadStreamGif(FILE  *fp){    l_int32          fd, wpl, i, j, w, h, d, cindex, ncolors;    l_int32          rval, gval, bval;    l_uint32        *data, *line;    GifFileType     *gif;    PIX             *pixd;    PIXCMAP         *cmap;    ColorMapObject  *gif_cmap;    SavedImage       si;    PROCNAME("pixReadStreamGif");    if ((fd = fileno(fp)) < 0)        return (PIX *)ERROR_PTR("invalid file descriptor", procName, NULL);#ifndef COMPILER_MSVC    lseek(fd, 0, SEEK_SET);#else    _lseek(fd, 0, SEEK_SET);#endif  /* COMPILER_MSVC */    if ((gif = DGifOpenFileHandle(fd)) == NULL)        return (PIX *)ERROR_PTR("invalid file or file not found",                                procName, NULL);    /* Read all the data, but use only the first image found */    if (DGifSlurp(gif) != GIF_OK) {        DGifCloseFile(gif);        return (PIX *)ERROR_PTR("failed to read GIF data", procName, NULL);    }    if (gif->SavedImages == NULL) {        DGifCloseFile(gif);        return (PIX *)ERROR_PTR("no images found in GIF", procName, NULL);    }    si = gif->SavedImages[0];    w = si.ImageDesc.Width;    h = si.ImageDesc.Height;    if (w <= 0 || h <= 0) {        DGifCloseFile(gif);        return (PIX *)ERROR_PTR("invalid image dimensions", procName, NULL);    }    if (si.RasterBits == NULL) {        DGifCloseFile(gif);        return (PIX *)ERROR_PTR("no raster data in GIF", procName, NULL);    }    if (si.ImageDesc.ColorMap) {        /* private cmap for this image */        gif_cmap = si.ImageDesc.ColorMap;    }    else if (gif->SColorMap) {        /* global cmap for whole picture */        gif_cmap = gif->SColorMap;    }    else {        /* don't know where to take cmap from */        DGifCloseFile(gif);        return (PIX *)ERROR_PTR("color map is missing", procName, NULL);    }    ncolors = gif_cmap->ColorCount;    if (ncolors <= 2)        d = 1;    else if (ncolors <= 4)        d = 2;    else if (ncolors <= 16)        d = 4;    else        d = 8;    if ((cmap = pixcmapCreate(d)) == NULL)        return (PIX *)ERROR_PTR("cmap creation failed", procName, NULL);    for (cindex = 0; cindex < ncolors; cindex++) {        rval = gif_cmap->Colors[cindex].Red;        gval = gif_cmap->Colors[cindex].Green;        bval = gif_cmap->Colors[cindex].Blue;        pixcmapAddColor(cmap, rval, gval, bval);    }    if ((pixd = pixCreate(w, h, d)) == NULL) {        DGifCloseFile(gif);        pixcmapDestroy(&cmap);        return (PIX *)ERROR_PTR("failed to allocate pixd", procName, NULL);    }    pixSetColormap(pixd, cmap);    wpl = pixGetWpl(pixd);    data = pixGetData(pixd);    for (i = 0; i < h; i++) {        line = data + i * wpl;//.........这里部分代码省略.........
开发者ID:kolyden,项目名称:mirror,代码行数:101,


示例20: pixReadMemJpeg

PIX * pixReadMemJpeg(const l_uint8 *cdata, size_t size, l_int32 cmflag,                     l_int32 reduction, l_int32 *pnwarn, l_int32 hint){    return (PIX * )ERROR_PTR("function not present", "pixReadMemJpeg", NULL);}
开发者ID:ConfusedReality,项目名称:pkg_images_leptonica,代码行数:5,


示例21: gifToPix

/*! * /brief   gifToPix() * * /param[in]  gif   opened gif stream * /return  pix, or NULL on error * * <pre> * Notes: *      (1) This decodes the pix from the compressed gif stream and *          closes the stream. *      (2) It is static so that the stream is not exposed to clients. * </pre> */static PIX *gifToPix(GifFileType  *gif){l_int32          wpl, i, j, w, h, d, cindex, ncolors;l_int32          rval, gval, bval;l_uint32        *data, *line;PIX             *pixd;PIXCMAP         *cmap;ColorMapObject  *gif_cmap;SavedImage       si;int              giferr;    PROCNAME("gifToPix");        /* Read all the data, but use only the first image found */    if (DGifSlurp(gif) != GIF_OK) {        DGifCloseFile(gif, &giferr);        return (PIX *)ERROR_PTR("failed to read GIF data", procName, NULL);    }    if (gif->SavedImages == NULL) {        DGifCloseFile(gif, &giferr);        return (PIX *)ERROR_PTR("no images found in GIF", procName, NULL);    }    si = gif->SavedImages[0];    w = si.ImageDesc.Width;    h = si.ImageDesc.Height;    if (w <= 0 || h <= 0) {        DGifCloseFile(gif, &giferr);        return (PIX *)ERROR_PTR("invalid image dimensions", procName, NULL);    }    if (si.RasterBits == NULL) {        DGifCloseFile(gif, &giferr);        return (PIX *)ERROR_PTR("no raster data in GIF", procName, NULL);    }    if (si.ImageDesc.ColorMap) {            /* private cmap for this image */        gif_cmap = si.ImageDesc.ColorMap;    } else if (gif->SColorMap) {            /* global cmap for whole picture */        gif_cmap = gif->SColorMap;    } else {            /* don't know where to take cmap from */        DGifCloseFile(gif, &giferr);        return (PIX *)ERROR_PTR("color map is missing", procName, NULL);    }    ncolors = gif_cmap->ColorCount;    if (ncolors <= 2)        d = 1;    else if (ncolors <= 4)        d = 2;    else if (ncolors <= 16)        d = 4;    else        d = 8;    if ((cmap = pixcmapCreate(d)) == NULL) {        DGifCloseFile(gif, &giferr);        return (PIX *)ERROR_PTR("cmap creation failed", procName, NULL);    }    for (cindex = 0; cindex < ncolors; cindex++) {        rval = gif_cmap->Colors[cindex].Red;        gval = gif_cmap->Colors[cindex].Green;        bval = gif_cmap->Colors[cindex].Blue;        pixcmapAddColor(cmap, rval, gval, bval);    }    if ((pixd = pixCreate(w, h, d)) == NULL) {        DGifCloseFile(gif, &giferr);        pixcmapDestroy(&cmap);        return (PIX *)ERROR_PTR("failed to allocate pixd", procName, NULL);    }    pixSetInputFormat(pixd, IFF_GIF);    pixSetColormap(pixd, cmap);    wpl = pixGetWpl(pixd);    data = pixGetData(pixd);    for (i = 0; i < h; i++) {        line = data + i * wpl;        if (d == 1) {            for (j = 0; j < w; j++) {                if (si.RasterBits[i * w + j])                    SET_DATA_BIT(line, j);//.........这里部分代码省略.........
开发者ID:creatale,项目名称:node-dv,代码行数:101,


示例22: pixReadJpeg

PIX * pixReadJpeg(const char *filename, l_int32 cmflag, l_int32 reduction,                  l_int32 *pnwarn, l_int32 hint){    return (PIX * )ERROR_PTR("function not present", "pixReadJpeg", NULL);}
开发者ID:ConfusedReality,项目名称:pkg_images_leptonica,代码行数:5,


示例23: boxaMakeSizeIndicator

/*! * /brief   boxaMakeSizeIndicator() * * /param[in]    boxa * /param[in]    width, height   threshold dimensions * /param[in]    type            L_SELECT_WIDTH, L_SELECT_HEIGHT, *                               L_SELECT_IF_EITHER, L_SELECT_IF_BOTH * /param[in]    relation        L_SELECT_IF_LT, L_SELECT_IF_GT, *                               L_SELECT_IF_LTE, L_SELECT_IF_GTE * /return  na indicator array, or NULL on error * * <pre> * Notes: *      (1) The args specify constraints on the size of the *          components that are kept. *      (2) If the selection type is L_SELECT_WIDTH, the input *          height is ignored, and v.v. *      (3) To keep small components, use relation = L_SELECT_IF_LT or *          L_SELECT_IF_LTE. *          To keep large components, use relation = L_SELECT_IF_GT or *          L_SELECT_IF_GTE. * </pre> */NUMA *boxaMakeSizeIndicator(BOXA     *boxa,                      l_int32   width,                      l_int32   height,                      l_int32   type,                      l_int32   relation){l_int32  i, n, w, h, ival;NUMA    *na;    PROCNAME("boxaMakeSizeIndicator");    if (!boxa)        return (NUMA *)ERROR_PTR("boxa not defined", procName, NULL);    if ((n = boxaGetCount(boxa)) == 0)        return (NUMA *)ERROR_PTR("boxa is empty", procName, NULL);    if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT &&        type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH)        return (NUMA *)ERROR_PTR("invalid type", procName, NULL);    if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT &&        relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE)        return (NUMA *)ERROR_PTR("invalid relation", procName, NULL);    na = numaCreate(n);    for (i = 0; i < n; i++) {        ival = 0;        boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h);        switch (type)        {        case L_SELECT_WIDTH:            if ((relation == L_SELECT_IF_LT && w < width) ||                (relation == L_SELECT_IF_GT && w > width) ||                (relation == L_SELECT_IF_LTE && w <= width) ||                (relation == L_SELECT_IF_GTE && w >= width))                ival = 1;            break;        case L_SELECT_HEIGHT:            if ((relation == L_SELECT_IF_LT && h < height) ||                (relation == L_SELECT_IF_GT && h > height) ||                (relation == L_SELECT_IF_LTE && h <= height) ||                (relation == L_SELECT_IF_GTE && h >= height))                ival = 1;            break;        case L_SELECT_IF_EITHER:            if (((relation == L_SELECT_IF_LT) && (w < width || h < height)) ||                ((relation == L_SELECT_IF_GT) && (w > width || h > height)) ||               ((relation == L_SELECT_IF_LTE) && (w <= width || h <= height)) ||                ((relation == L_SELECT_IF_GTE) && (w >= width || h >= height)))                    ival = 1;            break;        case L_SELECT_IF_BOTH:            if (((relation == L_SELECT_IF_LT) && (w < width && h < height)) ||                ((relation == L_SELECT_IF_GT) && (w > width && h > height)) ||               ((relation == L_SELECT_IF_LTE) && (w <= width && h <= height)) ||                ((relation == L_SELECT_IF_GTE) && (w >= width && h >= height)))                    ival = 1;            break;        default:            L_WARNING("can't get here!/n", procName);            break;        }        numaAddNumber(na, ival);    }    return na;}
开发者ID:pullmoll,项目名称:leptonica,代码行数:89,


示例24: pixReadStreamJpeg

PIX * pixReadStreamJpeg(FILE *fp, l_int32 cmflag, l_int32 reduction,                        l_int32 *pnwarn, l_int32 hint){    return (PIX * )ERROR_PTR("function not present", "pixReadStreamJpeg", NULL);}
开发者ID:ConfusedReality,项目名称:pkg_images_leptonica,代码行数:5,


示例25: pixReadMem

/*! *  pixReadMem() * *      Input:  data (const; encoded) *              datasize (size of data) *      Return: pix, or null on error * *  Notes: *      (1) This is a variation of pixReadStream(), where the data is read *          from a memory buffer rather than a file. *      (2) On windows, this only reads tiff formatted files directly from *          memory.  For other formats, it write to a temp file and *          decompress from file. *      (3) findFileFormatBuffer() requires up to 12 bytes to decide on *          the format.  That determines the constraint here.  But in *          fact the data must contain the entire compressed string for *          the image. */PIX *pixReadMem(const l_uint8  *data,           size_t          size){    l_int32  format;    PIX     *pix;    PROCNAME("pixReadMem");    if (!data)        return (PIX *)ERROR_PTR("data not defined", procName, NULL);    if (size < 12)        return (PIX *)ERROR_PTR("size < 12", procName, NULL);    pix = NULL;    findFileFormatBuffer(data, &format);    switch (format)    {    case IFF_BMP:        if ((pix = pixReadMemBmp(data, size)) == NULL )            return (PIX *)ERROR_PTR( "bmp: no pix returned", procName, NULL);        break;    case IFF_JFIF_JPEG:        if ((pix = pixReadMemJpeg(data, size, 0, 1, NULL, 0)) == NULL)            return (PIX *)ERROR_PTR( "jpeg: no pix returned", procName, NULL);        break;    case IFF_PNG:        if ((pix = pixReadMemPng(data, size)) == NULL)            return (PIX *)ERROR_PTR("png: no pix returned", procName, NULL);        break;    case IFF_TIFF:    case IFF_TIFF_PACKBITS:    case IFF_TIFF_RLE:    case IFF_TIFF_G3:    case IFF_TIFF_G4:    case IFF_TIFF_LZW:    case IFF_TIFF_ZIP:        /* Reading page 0 by default */        if ((pix = pixReadMemTiff(data, size, 0)) == NULL)            return (PIX *)ERROR_PTR("tiff: no pix returned", procName, NULL);        break;    case IFF_PNM:        if ((pix = pixReadMemPnm(data, size)) == NULL)            return (PIX *)ERROR_PTR("pnm: no pix returned", procName, NULL);        break;    case IFF_GIF:        if ((pix = pixReadMemGif(data, size)) == NULL)            return (PIX *)ERROR_PTR("gif: no pix returned", procName, NULL);        break;    case IFF_JP2:        if ((pix = pixReadMemJp2k(data, size, 1, NULL, 0, 0)) == NULL)            return (PIX *)ERROR_PTR("jp2k: no pix returned", procName, NULL);        break;    case IFF_WEBP:        if ((pix = pixReadMemWebP(data, size)) == NULL)            return (PIX *)ERROR_PTR("webp: no pix returned", procName, NULL);        break;    case IFF_SPIX:        if ((pix = pixReadMemSpix(data, size)) == NULL)            return (PIX *)ERROR_PTR("spix: no pix returned", procName, NULL);        break;    case IFF_UNKNOWN:        return (PIX *)ERROR_PTR("Unknown format: no pix returned",                                procName, NULL);        break;    }    /* Set the input format.  For tiff reading from memory we lose     * the actual input format; for 1 bpp, default to G4.  */    if (pix) {        if (format == IFF_TIFF && pixGetDepth(pix) == 1)            format = IFF_TIFF_G4;        pixSetInputFormat(pix, format);//.........这里部分代码省略.........
开发者ID:xmarston,项目名称:BillRecognizer,代码行数:101,


示例26: sudokuReadFile

/*! *  sudokuReadFile() * *      Input:  filename (of formatted sudoku file) *      Return: array (of 81 numbers), or null on error * *  Notes: *      (1) The file format has: *          * any number of comment lines beginning with '#' *          * a set of 9 lines, each having 9 digits (0-9) separated *            by a space */l_int32 *sudokuReadFile(const char  *filename){char     *str, *strj;l_uint8  *data;l_int32   i, j, nlines, val, index, error;l_int32  *array;size_t    size;SARRAY   *saline, *sa1, *sa2;    PROCNAME("sudokuReadFile");    if (!filename)        return (l_int32 *)ERROR_PTR("filename not defined", procName, NULL);    data = l_binaryRead(filename, &size);    sa1 = sarrayCreateLinesFromString((char *)data, 0);    sa2 = sarrayCreate(9);        /* Filter out the comment lines; verify that there are 9 data lines */    nlines = sarrayGetCount(sa1);    for (i = 0; i < nlines; i++) {        str = sarrayGetString(sa1, i, L_NOCOPY);        if (str[0] != '#')            sarrayAddString(sa2, str, L_COPY);    }    LEPT_FREE(data);    sarrayDestroy(&sa1);    nlines = sarrayGetCount(sa2);    if (nlines != 9) {        sarrayDestroy(&sa2);        L_ERROR("file has %d lines/n", procName, nlines);        return (l_int32 *)ERROR_PTR("invalid file", procName, NULL);    }        /* Read the data into the array, verifying that each data         * line has 9 numbers. */    error = FALSE;    array = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32));    for (i = 0, index = 0; i < 9; i++) {        str = sarrayGetString(sa2, i, L_NOCOPY);        saline = sarrayCreateWordsFromString(str);        if (sarrayGetCount(saline) != 9) {            error = TRUE;            sarrayDestroy(&saline);            break;        }        for (j = 0; j < 9; j++) {            strj = sarrayGetString(saline, j, L_NOCOPY);            if (sscanf(strj, "%d", &val) != 1)                error = TRUE;            else                array[index++] = val;        }        sarrayDestroy(&saline);        if (error) break;    }    sarrayDestroy(&sa2);    if (error) {        LEPT_FREE(array);        return (l_int32 *)ERROR_PTR("invalid data", procName, NULL);    }    return array;}
开发者ID:Android-BD,项目名称:tess-two,代码行数:77,


示例27: sarrayMakeInnerLoopDWACode

/*! *  sarrayMakeInnerLoopDWACode() */static SARRAY *sarrayMakeInnerLoopDWACode(SEL     *sel,                           l_int32  index){char    *tstr, *string;char     logicalor[] = "|";char     logicaland[] = "&";char     bigbuf[L_BUF_SIZE];l_int32  i, j, optype, count, nfound, delx, dely;SARRAY  *sa;    PROCNAME("sarrayMakeInnerLoopDWACode");    if (!sel)        return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL);    if (index % 2 == 0) {        optype = L_MORPH_DILATE;        tstr = logicalor;    } else {        optype = L_MORPH_ERODE;        tstr = logicaland;    }    count = 0;    for (i = 0; i < sel->sy; i++) {        for (j = 0; j < sel->sx; j++) {            if (sel->data[i][j] == 1)                count++;        }    }    if ((sa = sarrayCreate(0)) == NULL)        return (SARRAY *)ERROR_PTR("sa not made", procName, NULL);    if (count == 0) {        L_WARNING("no hits in Sel %d/n", procName, index);        return sa;  /* no code inside! */    }    nfound = 0;    for (i = 0; i < sel->sy; i++) {        for (j = 0; j < sel->sx; j++) {            if (sel->data[i][j] == 1) {                nfound++;                if (optype == L_MORPH_DILATE) {                    dely = sel->cy - i;                    delx = sel->cx - j;                } else if (optype == L_MORPH_ERODE) {                    dely = i - sel->cy;                    delx = j - sel->cx;                }                if ((string = makeBarrelshiftString(delx, dely)) == NULL) {                    L_WARNING("barrel shift string not made/n", procName);                    continue;                }                if (count == 1)  /* just one item */                    sprintf(bigbuf, "            *dptr = %s;", string);                else if (nfound == 1)                    sprintf(bigbuf, "            *dptr = %s %s", string, tstr);                else if (nfound < count)                    sprintf(bigbuf, "                    %s %s", string, tstr);                else  /* nfound == count */                    sprintf(bigbuf, "                    %s;", string);                sarrayAddString(sa, bigbuf, L_COPY);                LEPT_FREE(string);            }        }    }    return sa;}
开发者ID:AAAyag,项目名称:tess-two,代码行数:74,


示例28: sudokuGenerate

/*! *  sudokuGenerate() * *      Input:  array (of 81 numbers, 9 rows of 9 numbers each) *              seed (random number) *              minelems (min non-zero elements allowed; <= 80) *              maxtries (max tries to remove a number and get a valid sudoku) *      Return: l_sudoku, or null on error * *  Notes: *      (1) This is a brute force generator.  It starts with a completed *          sudoku solution and, by removing elements (setting them to 0), *          generates a valid (unique) sudoku initial condition. *      (2) The process stops when either @minelems, the minimum *          number of non-zero elements, is reached, or when the *          number of attempts to remove the next element exceeds @maxtries. *      (3) No sudoku is known with less than 17 nonzero elements. */L_SUDOKU *sudokuGenerate(l_int32  *array,               l_int32   seed,               l_int32   minelems,               l_int32   maxtries){l_int32    index, sector, nzeros, removefirst, tries, val, oldval, unique;L_SUDOKU  *sud, *testsud;    PROCNAME("sudokuGenerate");    if (!array)        return (L_SUDOKU *)ERROR_PTR("array not defined", procName, NULL);    if (minelems > 80)        return (L_SUDOKU *)ERROR_PTR("minelems must be < 81", procName, NULL);        /* Remove up to 30 numbers at random from the solution.         * Test if the solution is valid -- the initial 'solution' may         * have been invalid.  Then test if the sudoku with 30 zeroes         * is unique -- it almost always will be. */    srand(seed);    nzeros = 0;    sector = 0;    removefirst = L_MIN(30, 81 - minelems);    while (nzeros < removefirst) {        genRandomIntegerInRange(9, 0, &val);        index = 27 * (sector / 3) + 3 * (sector % 3) +                9 * (val / 3) + (val % 3);        if (array[index] == 0) continue;        array[index] = 0;        nzeros++;        sector++;        sector %= 9;    }    testsud = sudokuCreate(array);    sudokuSolve(testsud);    if (testsud->failure) {        sudokuDestroy(&testsud);        L_ERROR("invalid initial solution/n", procName);        return NULL;    }    sudokuTestUniqueness(testsud->init, &unique);    sudokuDestroy(&testsud);    if (!unique) {        L_ERROR("non-unique result with 30 zeroes/n", procName);        return NULL;    }        /* Remove more numbers, testing at each removal for uniqueness. */    tries = 0;    sector = 0;    while (1) {        if (tries > maxtries) break;        if (81 - nzeros <= minelems) break;        if (tries == 0) {            fprintf(stderr, "Trying %d zeros/n", nzeros);            tries = 1;        }            /* Choose an element to be zeroed.  We choose one             * at random in succession from each of the nine sectors. */        genRandomIntegerInRange(9, 0, &val);        index = 27 * (sector / 3) + 3 * (sector % 3) +                9 * (val / 3) + (val % 3);        sector++;        sector %= 9;        if (array[index] == 0) continue;            /* Save the old value in case we need to revert */        oldval = array[index];            /* Is there a solution?  If not, try again. */        array[index] = 0;        testsud = sudokuCreate(array);        sudokuSolve(testsud);        if (testsud->failure == TRUE) {            sudokuDestroy(&testsud);            array[index] = oldval;  /* revert */            tries++;            continue;        }//.........这里部分代码省略.........
开发者ID:Android-BD,项目名称:tess-two,代码行数:101,


示例29: pixFMorphopGen_3

/*! *  pixFMorphopGen_3() * *      Input:  pixd (usual 3 choices: null, == pixs, != pixs) *              pixs (1 bpp) *              operation  (L_MORPH_DILATE, L_MORPH_ERODE, *                          L_MORPH_OPEN, L_MORPH_CLOSE) *              sel name *      Return: pixd * *  Notes: *      (1) This is a dwa operation, and the Sels must be limited in *          size to not more than 31 pixels about the origin. *      (2) A border of appropriate size (32 pixels, or 64 pixels *          for safe closing with asymmetric b.c.) must be added before *          this function is called. *      (3) This handles all required setting of the border pixels *          before erosion and dilation. *      (4) The closing operation is safe; no pixels can be removed *          near the boundary. */PIX *pixFMorphopGen_3(PIX     *pixd,                 PIX     *pixs,                 l_int32  operation,                 char    *selname){l_int32    i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop;l_uint32  *datad, *datas, *datat;PIX       *pixt;    PROCNAME("pixFMorphopGen_3");    if (!pixs)        return (PIX *)ERROR_PTR("pixs not defined", procName, pixd);    if (pixGetDepth(pixs) != 1)        return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd);        /* Get boundary colors to use */    bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1);    if (bordercolor == 1)        erodeop = PIX_SET;    else        erodeop = PIX_CLR;    found = FALSE;    for (i = 0; i < NUM_SELS_GENERATED; i++) {        if (strcmp(selname, SEL_NAMES[i]) == 0) {            found = TRUE;            index = 2 * i;            break;        }    }    if (found == FALSE)        return (PIX *)ERROR_PTR("sel index not found", procName, pixd);    if (!pixd) {        if ((pixd = pixCreateTemplate(pixs)) == NULL)            return (PIX *)ERROR_PTR("pixd not made", procName, NULL);    }    else  /* for in-place or pre-allocated */        pixResizeImageData(pixd, pixs);    wpls = pixGetWpl(pixs);    wpld = pixGetWpl(pixd);        /* The images must be surrounded, in advance, with a border of         * size 32 pixels (or 64, for closing), that we'll read from.         * Fabricate a "proper" image as the subimage within the 32         * pixel border, having the following parameters:  */    w = pixGetWidth(pixs) - 64;    h = pixGetHeight(pixs) - 64;    datas = pixGetData(pixs) + 32 * wpls + 1;    datad = pixGetData(pixd) + 32 * wpld + 1;    if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) {        borderop = PIX_CLR;        if (operation == L_MORPH_ERODE) {            borderop = erodeop;            index++;        }        if (pixd == pixs) {  /* in-place; generate a temp image */            if ((pixt = pixCopy(NULL, pixs)) == NULL)                return (PIX *)ERROR_PTR("pixt not made", procName, pixd);            datat = pixGetData(pixt) + 32 * wpls + 1;            pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop);            fmorphopgen_low_3(datad, w, h, wpld, datat, wpls, index);            pixDestroy(&pixt);        }        else { /* not in-place */            pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop);            fmorphopgen_low_3(datad, w, h, wpld, datas, wpls, index);        }    }    else {  /* opening or closing; generate a temp image */        if ((pixt = pixCreateTemplate(pixs)) == NULL)            return (PIX *)ERROR_PTR("pixt not made", procName, pixd);        datat = pixGetData(pixt) + 32 * wpls + 1;        if (operation == L_MORPH_OPEN) {            pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop);            fmorphopgen_low_3(datat, w, h, wpls, datas, wpls, index+1);//.........这里部分代码省略.........
开发者ID:0359xiaodong,项目名称:tess-two,代码行数:101,


示例30: pixReadStreamJpeg

/*! *  pixReadStreamJpeg() * *      Input:  stream *              colormap flag (0 means return RGB image if color; *                             1 means create colormap and return 8 bpp *                               palette image if color) *              reduction (scaling factor: 1, 2, 4 or 8) *              &pnwarn (<optional return> number of warnings) *              hint: (a bitwise OR of L_HINT_* values); use 0 for no hints *      Return: pix, or null on error * *  Usage: see pixReadJpeg() */PIX *pixReadStreamJpeg(FILE     *fp,                  l_int32   cmflag,                  l_int32   reduction,                  l_int32  *pnwarn,                  l_int32   hint){l_uint8                        cyan, yellow, magenta, black, white;l_int32                        rval, gval, bval;l_int32                        i, j, k;l_int32                        w, h, wpl, spp, ncolors, cindex, ycck, cmyk;l_uint32                      *data;l_uint32                      *line, *ppixel;JSAMPROW                       rowbuffer;PIX                           *pix;PIXCMAP                       *cmap;struct jpeg_decompress_struct  cinfo;struct jpeg_error_mgr          jerr;l_uint8                       *comment = NULL;    PROCNAME("pixReadStreamJpeg");    if (!fp)        return (PIX *)ERROR_PTR("fp not defined", procName, NULL);    if (pnwarn)        *pnwarn = 0;  /* init */    if (cmflag != 0 && cmflag != 1)        cmflag = 0;  /* default */    if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8)        return (PIX *)ERROR_PTR("reduction not in {1,2,4,8}", procName, NULL);    if (BITS_IN_JSAMPLE != 8)  /* set in jmorecfg.h */        return (PIX *)ERROR_PTR("BITS_IN_JSAMPLE != 8", procName, NULL);    rewind(fp);    pix = NULL;  /* init */    if (setjmp(jpeg_jmpbuf)) {        pixDestroy(&pix);        FREE(rowbuffer);        return (PIX *)ERROR_PTR("internal jpeg error", procName, NULL);    }    rowbuffer = NULL;    cinfo.err = jpeg_std_error(&jerr);    jerr.error_exit = jpeg_error_do_not_exit; /* catch error; do not exit! */    jpeg_create_decompress(&cinfo);    cinfo.client_data = &comment;    jpeg_set_marker_processor(&cinfo, JPEG_COM, jpeg_comment_callback);    jpeg_stdio_src(&cinfo, fp);    jpeg_read_header(&cinfo, TRUE);    cinfo.scale_denom = reduction;    cinfo.scale_num = 1;    if (hint & L_HINT_GRAY)        cinfo.out_color_space = JCS_GRAYSCALE;    jpeg_calc_output_dimensions(&cinfo);        /* Allocate the image and a row buffer */    spp = cinfo.out_color_components;    w = cinfo.output_width;    h = cinfo.output_height;    ycck = (cinfo.jpeg_color_space == JCS_YCCK && spp == 4 && cmflag == 0);    cmyk = (cinfo.jpeg_color_space == JCS_CMYK && spp == 4 && cmflag == 0);    if (spp != 1 && spp != 3 && !ycck && !cmyk) {        if (comment) FREE(comment);        return (PIX *)ERROR_PTR("spp must be 1 or 3, or YCCK or CMYK",                                procName, NULL);    }    if ((spp == 3 && cmflag == 0) || ycck || cmyk) {  /* rgb or 4 bpp color */        rowbuffer = (JSAMPROW)CALLOC(sizeof(JSAMPLE), spp * w);        pix = pixCreate(w, h, 32);    }    else {  /* 8 bpp gray or colormapped */        rowbuffer = (JSAMPROW)CALLOC(sizeof(JSAMPLE), w);        pix = pixCreate(w, h, 8);    }    if (!rowbuffer || !pix) {        if (comment) FREE(comment);	if (rowbuffer) FREE(rowbuffer);	pixDestroy(&pix);        return (PIX *)ERROR_PTR("rowbuffer or pix not made", procName, NULL);    }    if (comment) {//.........这里部分代码省略.........
开发者ID:AngusHardie,项目名称:TesseractOCR-For-Mac,代码行数:101,



注:本文中的ERROR_PTR函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ ERROR_SPRINTF函数代码示例
C++ ERROR_PRINT函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。