76 lines
2.3 KiB
C
76 lines
2.3 KiB
C
/* ****************************************************************************
|
|
* picture/manage.c -- picture management.
|
|
* Copyright (C) 2017 Thomas "Cakeisalie5" Touhey <thomas@touhey.fr>
|
|
*
|
|
* This file is part of libcasio.
|
|
* libcasio is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation; either version 3.0 of the License,
|
|
* or (at your option) any later version.
|
|
*
|
|
* libcasio is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with libcasio; if not, see <http://www.gnu.org/licenses/>.
|
|
* ************************************************************************* */
|
|
#include "internals.h"
|
|
# define alloc_pixels(W, H) \
|
|
casio_alloc(sizeof(casio_pixel_t*) \
|
|
* (H) + sizeof(casio_pixel_t) * (W) * (H), 1)
|
|
# define prepare_pixels(I, W, H) { \
|
|
unsigned int PIXPREP_y; \
|
|
casio_pixel_t *PIXPREP_line = (casio_pixel_t*)&(I)[(H)]; \
|
|
for (PIXPREP_y = 0; PIXPREP_y < (H); PIXPREP_y++) { \
|
|
(I)[PIXPREP_y] = PIXPREP_line; \
|
|
PIXPREP_line += (W); \
|
|
}}
|
|
|
|
CASIO_EXTERN(int) casio_prepare_picture(casio_picture_t **picturep,
|
|
unsigned int width, unsigned int height)
|
|
{
|
|
casio_pixel_t **pixels;
|
|
casio_picture_t *picture;
|
|
|
|
if (!(pixels = alloc_pixels(width, height)))
|
|
return (casio_error_alloc);
|
|
if (!(*picturep = (picture = (casio_alloc(1, sizeof(casio_picture_t)))))) {
|
|
casio_free(pixels);
|
|
return (casio_error_alloc);
|
|
}
|
|
|
|
picture->width = width;
|
|
picture->height = height;
|
|
picture->pixels = pixels;
|
|
|
|
prepare_pixels(pixels, width, height)
|
|
|
|
return (casio_ok);
|
|
}
|
|
|
|
CASIO_EXTERN(void) casio_free_picture(casio_picture_t *picture)
|
|
{
|
|
if (!picture)
|
|
return ;
|
|
|
|
casio_free(picture->pixels);
|
|
casio_free(picture);
|
|
}
|
|
|
|
CASIO_EXTERN(int) casio_get_picture_dimensions(casio_picture_t *picture,
|
|
unsigned int *widthp, unsigned int *heightp)
|
|
{
|
|
*widthp = picture->width;
|
|
*heightp = picture->height;
|
|
return (casio_ok);
|
|
}
|
|
|
|
CASIO_EXTERN(int) casio_access_pixels(casio_picture_t *picture,
|
|
casio_pixel_t ***pixelsp)
|
|
{
|
|
*pixelsp = picture->pixels;
|
|
return (casio_ok);
|
|
}
|