Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4680 right-hear 1
#include "fitz.h"
2
 
3
fz_bitmap *
4
fz_new_bitmap(int w, int h, int n)
5
{
6
	fz_bitmap *bit;
7
 
8
	bit = fz_malloc(sizeof(fz_bitmap));
9
	bit->refs = 1;
10
	bit->w = w;
11
	bit->h = h;
12
	bit->n = n;
13
	/* Span is 32 bit aligned. We may want to make this 64 bit if we
14
	 * use SSE2 etc. */
15
	bit->stride = ((n * w + 31) & ~31) >> 3;
16
 
17
	bit->samples = fz_calloc(h, bit->stride);
18
 
19
	return bit;
20
}
21
 
22
fz_bitmap *
23
fz_keep_bitmap(fz_bitmap *pix)
24
{
25
	pix->refs++;
26
	return pix;
27
}
28
 
29
void
30
fz_drop_bitmap(fz_bitmap *bit)
31
{
32
	if (bit && --bit->refs == 0)
33
	{
34
		fz_free(bit->samples);
35
		fz_free(bit);
36
	}
37
}
38
 
39
void
40
fz_clear_bitmap(fz_bitmap *bit)
41
{
42
	memset(bit->samples, 0, bit->stride * bit->h);
43
}
44
 
45
/*
46
 * Write bitmap to PBM file
47
 */
48
 
49
fz_error
50
fz_write_pbm(fz_bitmap *bitmap, char *filename)
51
{
52
	FILE *fp;
53
	unsigned char *p;
54
	int h, bytestride;
55
 
56
	fp = fopen(filename, "wb");
57
	if (!fp)
58
		return fz_throw("cannot open file '%s': %s", filename, strerror(errno));
59
 
60
	assert(bitmap->n == 1);
61
 
62
	fprintf(fp, "P4\n%d %d\n", bitmap->w, bitmap->h);
63
 
64
	p = bitmap->samples;
65
 
66
	h = bitmap->h;
67
	bytestride = (bitmap->w + 7) >> 3;
68
	while (h--)
69
	{
70
		fwrite(p, 1, bytestride, fp);
71
		p += bitmap->stride;
72
	}
73
 
74
	fclose(fp);
75
	return fz_okay;
76
}