示例#1
0
int32_t CTB_AddRecRaster(const char *fname, RecRaster *r, uchar let)
{
    CTB_handle hnd;
    int32_t num;
    uchar raster[REC_MAX_RASTER_SIZE], data[CTB_DATA_SIZE] = { 0 };
    int32_t wb;
    Bool32 ret;

    if (!CTB_open(fname, &hnd, "w")) {
        if (1)
            CTB_create(fname, NULL);

        else
            CTB_create_gray(fname, NULL);

        if (!CTB_open(fname, &hnd, "w")) {
            return FALSE;
        }
    }

    data[1] = (uchar) r->lnPixWidth;
    data[2] = (uchar) r->lnPixHeight;
    data[3] = let;

    if (hnd.signums & (CTB_GRAY_SCALE | CTB_PLANE)) {
        wb = r->lnPixWidth;
        memcpy(raster, r->Raster, wb * r->lnPixHeight);
    }

    else {
        wb = ((r->lnPixWidth + 63) / 64) * 8;
        memcpy(raster, r->Raster, wb * r->lnPixHeight);
        CTB_align1_lines(raster, r->lnPixWidth, r->lnPixHeight);
    }

    ret = CTB_write(&hnd, -1, raster, data);
    num = hnd.num;
    CTB_close(&hnd);
    return ret ? num : -1;
}
示例#2
0
int16_t rstr_cont_store(RecRaster *r,uchar let, uchar nLns,Rect16 *rect,uchar IsPrint,
                        uchar	Prob, uchar Valid, RecVersions *v,uchar control,
                        uchar   kegl,uchar column, uchar tabno)
{
    int32_t       num;
    uchar       raster[4096],data[CTB_DATA_SIZE]= {0};
    int32_t       wb, k;
    Bool32      ret;
    RecVersions ver;

    if( !this_ctb.bas ) // || !cont_name[0] )
        return 0;
    data[0]= CTB_OEM_CHARSET;
    data[1] = (uchar)r->lnPixWidth;
    data[2] = (uchar)r->lnPixHeight;
    data[3] = let; //stdAnsiToAscii(let);
    data[4] = 0;
    data[31] = nLns;
    data[32] = 0;
    data[5] = IsPrint;
    memcpy(&data[6],rect,sizeof(Rect16));
    data[14] = Prob;
    data[15] = Valid;

    if( v )
    {
        ver=*v;
        if( ver.lnAltCnt>4 )
            ver.lnAltCnt=4;
        data[16]=(uchar)ver.lnAltCnt;
        for(k=0; k<ver.lnAltCnt; k++)
        {
            data[17+k*2]= stdAnsiToAscii(ver.Alt[k].Code);
            data[18+k*2]= ver.Alt[k].Prob;
            data[28+k]  = ver.Alt[k].Method;
        }
    }
    data[25] = (uchar)line_number; // !!! can be great than 255
    data[26] = 0;//leo_current_alpha_ndx;
    data[27] = control;

    if( datalen>34 )
        data[34]=kegl;
    if( datalen>35 )
        data[35]=column;
    if( datalen>36 )
        data[36]=tabno;
    wb = ((r->lnPixWidth+63)/64)*8;
    memcpy( raster, r->Raster, wb*r->lnPixHeight);
#ifdef _USE_CTB_
    CTB_align1_lines(raster, r->lnPixWidth, r->lnPixHeight);
    ret = CTB_write( &this_ctb, -1, raster,  data);
    if( !ret )
        return -1;
    num = this_ctb.num;

    return (int16_t)num;  // id_rast = last sequentaly saved raster+1
#else
    ret=-1;
    num=-1;
    return -1;
#endif
}