1 /*****************************************************************************
2 * This file is part of gfxprim library. *
4 * Gfxprim is free software; you can redistribute it and/or *
5 * modify it under the terms of the GNU Lesser General Public *
6 * License as published by the Free Software Foundation; either *
7 * version 2.1 of the License, or (at your option) any later version. *
9 * Gfxprim is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
12 * Lesser General Public License for more details. *
14 * You should have received a copy of the GNU Lesser General Public *
15 * License along with gfxprim; if not, write to the Free Software *
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
17 * Boston, MA 02110-1301 USA *
19 * Copyright (C) 2009-2010 Jiri "BlueBear" Dluhos *
20 * <jiri.bluebear.dluhos@gmail.com> *
22 * Copyright (C) 2009-2010 Cyril Hrubis <metan@ucw.cz> *
24 *****************************************************************************/
28 inline GP_PixelType
GP_GetContextPixelType(const GP_Context
*context
)
30 return context
->pixel_type
;
33 GP_Context
*GP_ContextAlloc(uint32_t w
, uint32_t h
, GP_PixelType type
)
35 GP_Context
*context
= malloc(sizeof(GP_Context
));
36 uint32_t bpp
= GP_PixelSize(type
);
37 uint32_t bpr
= (bpp
* w
) / 8 + !!((bpp
* w
) % 8);
40 pixels
= malloc(bpr
* h
);
42 if (pixels
== NULL
|| context
== NULL
) {
48 context
->pixels
= pixels
;
50 context
->bytes_per_row
= bpr
;
55 context
->pixel_type
= type
;
57 /* rotation and mirroring */
58 context
->axes_swap
= 0;
63 context
->clip_w_min
= 0;
64 context
->clip_w_max
= w
- 1;
65 context
->clip_h_min
= 0;
66 context
->clip_h_max
= h
- 1;
71 void GP_ContextFree(GP_Context
*context
)
73 free(context
->pixels
);
77 GP_RetCode
GP_ContextDump(GP_Context
*context
, const char *path
)
79 FILE *f
= fopen(path
, "w");
85 for (y
= 0; y
< context
->h
; y
++) {
86 for (x
= 0; x
< context
->bytes_per_row
; x
++)
87 fprintf(f
, "0x%02x ", ((uint8_t *)context
->pixels
)[y
* context
->bytes_per_row
+ x
]);