ref: 7fc72d14be2af5e15866a9124a99b6dafea65dcd
dir: /jbig2_image.c/
/*
jbig2dec
Copyright (c) 2001 artofcode LLC.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
$Id: jbig2_image.c,v 1.6 2002/06/21 19:10:02 giles Exp $
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "jbig2.h"
#include "jbig2_priv.h"
#include "jbig2_image.h"
/* allocate a Jbig2Image structure and its associated bitmap */
Jbig2Image* jbig2_image_new(Jbig2Ctx *ctx, int width, int height)
{
Jbig2Image *image;
int stride;
image = (Jbig2Image *)jbig2_alloc(ctx->allocator, sizeof(*image));
if (image == NULL) {
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1,
"could not allocate image structure");
return NULL;
}
stride = (((width - 1) >> 5) + 1) << 2; /* generate a word-aligned stride */
image->data = (uint32_t *)jbig2_alloc(ctx->allocator, (stride*height));
if (image->data == NULL) {
jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1,
"could not allocate image data buffer! [%d bytes]\n", stride*height);
jbig2_free(ctx->allocator, image);
return NULL;
}
image->width = width;
image->height = height;
image->stride = stride;
return image;
}
/* free a Jbig2Image structure and its associated memory */
void jbig2_image_free(Jbig2Ctx *ctx, Jbig2Image *image)
{
jbig2_free(ctx->allocator, image->data);
jbig2_free(ctx->allocator, image);
}
/* composite one jbig2_image onto another */
// FIXME: need to add a drawing mode argument
int jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int y)
{
/* special case complete replacement */
if ((x == 0) && (y == 0) && (src->width == dst->width) && (src->height == dst->height)) {
memcpy(dst->data, src->data, src->height*src->stride);
return 0;
}
jbig2_error(ctx, JBIG2_SEVERITY_WARNING, -1,
"non-aligned image composition NYI");
return 1;
}