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 PBM portable bitmap loader/saver.
32 a magick number value of 'P' and '1'
33 whitespace (blanks, TABs, CRs, LFs).
38 width * height symbols '1' or '0' ('1' == black, '0' == white)
40 lines starting with '#' are comments to the end of line
48 #include "GP_PXMCommon.h"
51 GP_RetCode
GP_LoadPBM(const char *src_path
, GP_Context
**res
)
53 FILE *f
= fopen(src_path
, "r");
59 if (fgetc(f
) != 'P' || fgetc(f
) != '1')
62 if (fscanf(f
, "%"PRIu32
"%"PRIu32
, &w
, &h
) < 2)
65 *res
= GP_ContextAlloc(w
, h
, GP_PIXEL_G1
);
72 if (GP_PXMLoad1bpp(f
, *res
))
84 GP_RetCode
GP_SavePBM(const char *res_path
, GP_Context
*src
)
88 if (src
->pixel_type
!= GP_PIXEL_G1
)
91 f
= fopen(res_path
, "w");
96 if (fprintf(f
, "P1\n%u %u\n# Generated by gfxprim\n",
97 (unsigned int) src
->w
, (unsigned int) src
->h
) < 2)
100 if (GP_PXMSave1bpp(f
, src
))