3 #include "mupdf/fitz.h"
7 #define MIN_(a, b) ((a) < (b) ? (a) : (b))
14 void *doc_draw(struct doc
*doc
, int p
, int zoom
, int rotate
, int *rows
, int *cols
)
20 fz_scale(&ctm
, (float) zoom
/ 10, (float) zoom
/ 10);
21 fz_pre_rotate(&ctm
, rotate
);
22 pix
= fz_new_pixmap_from_page_number(doc
->ctx
, doc
->pdf
, p
- 1, &ctm
, fz_device_rgb(doc
->ctx
), 0);
25 if (!(pbuf
= malloc(pix
->w
* pix
->h
* sizeof(pbuf
[0])))) {
26 fz_drop_pixmap(doc
->ctx
, pix
);
29 for (y
= 0; y
< pix
->h
; y
++) {
30 unsigned char *s
= &pix
->samples
[y
* pix
->stride
];
31 for (x
= 0; x
< pix
->w
; x
++)
32 pbuf
[y
* pix
->w
+ x
] = FB_VAL(s
[x
* pix
->n
+ 0],
33 s
[x
* pix
->n
+ 1], s
[x
* pix
->n
+ 2]);
35 fz_drop_pixmap(doc
->ctx
, pix
);
41 int doc_pages(struct doc
*doc
)
43 return fz_count_pages(doc
->ctx
, doc
->pdf
);
46 struct doc
*doc_open(char *path
)
48 struct doc
*doc
= malloc(sizeof(*doc
));
49 doc
->ctx
= fz_new_context(NULL
, NULL
, FZ_STORE_DEFAULT
);
50 fz_register_document_handlers(doc
->ctx
);
52 doc
->pdf
= fz_open_document(doc
->ctx
, path
);
53 } fz_catch (doc
->ctx
) {
54 fz_drop_context(doc
->ctx
);
61 void doc_close(struct doc
*doc
)
63 fz_drop_document(doc
->ctx
, doc
->pdf
);
64 fz_drop_context(doc
->ctx
);