コード例 #1
0
ファイル: p_color.c プロジェクト: jimmccurdy/ArchiveGit
int
pdf_add_colorspace(PDF *p, pdf_colorspace cs, const char *spotname)
{
    int	slot;

    /* TODO: optimize and check for known color space combinations
    if (cs == Separation)
    for (slot = 0; slot < p->colorspaces_number; slot++) {
    if (!strcmp(p->colorspaces[slot].name, spotname))
        return slot;
    }
    */

    slot = p->colorspaces_number;

    if (p->colorspaces_number >= p->colorspaces_capacity)
        pdf_grow_colorspaces(p);

    if (cs == Separation) {
        p->colorspaces[slot].obj_id = pdf_alloc_id(p);
        p->colorspaces[slot].name = pdf_strdup(p, spotname);
        p->colorspaces[slot].cs = Separation;

        p->colorspaces[slot].alternate = p->cstate[p->sl].fill;

    } else if (cs == PatternCS) {
        p->colorspaces[slot].obj_id = pdf_alloc_id(p);
        p->colorspaces[slot].name = (char *) NULL;
        p->colorspaces[slot].cs = PatternCS;

        p->colorspaces[slot].alternate = p->cstate[p->sl].fill;

    } else {
        pdf_error(p, PDF_SystemError,
                  "Unknown color space in pdf_add_colorspace");
    }

    p->colorspaces[p->colorspaces_number].used_on_current_page = pdf_true;

    p->colorspaces_number++;

    return slot;
}
コード例 #2
0
ファイル: p_color.c プロジェクト: LuaDist/cd
int
pdf_add_colorspace(PDF *p, pdf_colorspace *cs, pdc_bool inuse)
{
    pdf_colorspace *cs_new;
    static const char fn[] = "pdf_add_colorspace";
    int slot;

    for (slot = 0; slot < p->colorspaces_number; slot++)
    {
	if (pdf_colorspace_equal(p, &p->colorspaces[slot], cs))
	{
	    if (inuse)
		p->colorspaces[slot].used_on_current_page = pdc_true;
	    return slot;
	}
    }

    slot = p->colorspaces_number;

    if (p->colorspaces_number >= p->colorspaces_capacity)
	pdf_grow_colorspaces(p);

    cs_new = &p->colorspaces[slot];

    cs_new->type = cs->type;

    /* don't allocate id for simple color spaces, since we don't write these */
    if (PDF_SIMPLE_COLORSPACE(cs)) {
	cs_new->obj_id = PDC_BAD_ID;
	cs_new->used_on_current_page = pdc_false;

    } else {
	cs_new->obj_id = pdc_alloc_id(p->out);
	cs_new->used_on_current_page = inuse;
    }

    switch (cs_new->type) {
	case DeviceGray:
	case DeviceRGB:
	case DeviceCMYK:
	break;


	case Indexed:
	{
	size_t palsize; 	/* palette size in bytes */

	palsize = cs->val.indexed.palette_size *
			    pdf_color_components(p, cs->val.indexed.base);

        cs_new->val.indexed.base = cs->val.indexed.base;
        cs_new->val.indexed.palette_size = cs->val.indexed.palette_size;
        cs_new->val.indexed.colormap_id = pdc_alloc_id(p->out);
        cs_new->val.indexed.colormap =
	    (pdf_colormap *) pdc_malloc(p->pdc, palsize, fn);
        memcpy(cs_new->val.indexed.colormap, cs->val.indexed.colormap, palsize);
        cs_new->val.indexed.colormap_done = pdc_false;
	break;

	case PatternCS:
        cs_new->val.pattern.base = cs->val.pattern.base;
	break;
	}


	default:
	    pdc_error(p->pdc, PDF_E_INT_BADCS, fn,
		pdc_errprintf(p->pdc, "%d", slot),
		pdc_errprintf(p->pdc, "%d", cs_new->type), 0);
    }

    p->colorspaces_number++;

    return slot;
} /* pdf_add_colorspace */