Beispiel #1
0
fz_halftone *fz_default_halftone(fz_context *ctx, int num_comps)
{
    fz_halftone *ht = fz_new_halftone(ctx, num_comps);

    fz_try(ctx)
    {
        int i;
        for (i = 0; i < num_comps; i++)
            ht->comp[i] = fz_new_pixmap_with_data(ctx, NULL, 16, 16, 1, 16, mono_ht);
    }
    fz_catch(ctx)
    {
        fz_drop_halftone(ctx, ht);
        fz_rethrow(ctx);
    }

    return ht;
}
Beispiel #2
0
fz_bitmap *fz_halftone_pixmap(fz_context *ctx, fz_pixmap *pix, fz_halftone *ht)
{
	fz_bitmap *out;
	unsigned char *ht_line, *o, *p;
	int w, h, x, y, n, pstride, ostride;
	fz_halftone *ht_orig = ht;

	if (!pix)
		return NULL;

	assert(pix->n == 2); /* Mono + Alpha */

	n = pix->n-1; /* Remove alpha */
	if (ht == NULL)
	{
		ht = fz_default_halftone(ctx, n);
	}
	ht_line = fz_malloc(ctx, pix->w * n);
	out = fz_new_bitmap(ctx, pix->w, pix->h, n, pix->xres, pix->yres);
	o = out->samples;
	p = pix->samples;

	h = pix->h;
	x = pix->x;
	y = pix->y;
	w = pix->w;
	ostride = out->stride;
	pstride = pix->w * pix->n;
	while (h--)
	{
		make_ht_line(ht_line, ht, x, y++, w);
		do_threshold_1(ht_line, p, o, w);
		o += ostride;
		p += pstride;
	}
	if (!ht_orig)
		fz_drop_halftone(ctx, ht);
	return out;
}