/* minidjvu - library for handling bilevel images with DjVuBitonal support
*
* patterns.h - matching patterns
*
* Copyright (C) 2005 Ilya Mezhirov
*
* 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.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* minidjvu is derived from DjVuLibre (http://djvu.sourceforge.net)
* All over DjVuLibre there is a patent alert from LizardTech
* which I guess I should reproduce (don't ask me what does this mean):
*
* ------------------------------------------------------------------
* | DjVu (r) Reference Library (v. 3.5)
* | Copyright (c) 1999-2001 LizardTech, Inc. All Rights Reserved.
* | The DjVu Reference Library is protected by U.S. Pat. No.
* | 6,058,214 and patents pending.
* |
* | This software is subject to, and may be distributed under, the
* | GNU General Public License, either Version 2 of the license,
* | or (at your option) any later version. The license should have
* | accompanied the software or you may obtain a copy of the license
* | from the Free Software Foundation at http://www.fsf.org .
* |
* | The computer code originally released by LizardTech under this
* | license and unmodified by other parties is deemed "the LIZARDTECH
* | ORIGINAL CODE." Subject to any third party intellectual property
* | claims, LizardTech grants recipient a worldwide, royalty-free,
* | non-exclusive license to make, use, sell, or otherwise dispose of
* | the LIZARDTECH ORIGINAL CODE or of programs derived from the
* | LIZARDTECH ORIGINAL CODE in compliance with the terms of the GNU
* | General Public License. This grant only confers the right to
* | infringe patent claims underlying the LIZARDTECH ORIGINAL CODE to
* | the extent such infringement is reasonably necessary to enable
* | recipient to make, have made, practice, sell, or otherwise dispose
* | of the LIZARDTECH ORIGINAL CODE (or portions thereof) and not to
* | any greater extent that may be necessary to utilize further
* | modifications or combinations.
* |
* | The LIZARDTECH ORIGINAL CODE is provided "AS IS" WITHOUT WARRANTY
* | OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* | TO ANY WARRANTY OF NON-INFRINGEMENT, OR ANY IMPLIED WARRANTY OF
* | MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
* +------------------------------------------------------------------
*/
#ifndef MDJVU_PATTERNS_H
#define MDJVU_PATTERNS_H
/* To get an image ready for comparisons, one have to `prepare' it.
* A prepared image is called a `pattern' here.
*/
/* the struct itself is not defined in this header */
typedef struct MinidjvuPattern *mdjvu_pattern_t;
/* Allocate a pattern and calculate all necessary information.
* Memory consumption is byte per pixel + constant.
* The pattern would be completely independent on the bitmap given.
* (that is, you can destroy the bitmap immediately)
*/
#ifndef NO_MINIDJVU
MDJVU_FUNCTION mdjvu_pattern_t mdjvu_pattern_create(mdjvu_bitmap_t);
#endif
/* Same, but create from two-dimensional array.
*/
MDJVU_FUNCTION mdjvu_pattern_t mdjvu_pattern_create_from_array
(unsigned char **, int32 w, int32 h);
/* Destroy the pattern. */
MDJVU_FUNCTION void mdjvu_pattern_destroy(mdjvu_pattern_t);
typedef struct MinidjvuMatcherOptions *mdjvu_matcher_options_t;
MDJVU_FUNCTION mdjvu_matcher_options_t mdjvu_matcher_options_create(void);
MDJVU_FUNCTION void mdjvu_set_aggression(mdjvu_matcher_options_t, int level);
MDJVU_FUNCTION void mdjvu_matcher_options_destroy(mdjvu_matcher_options_t);
/* Compare patterns.
* Returns
* +1 if images are considered equivalent,
* -1 if they are considered totally different (just to speed up things),
* 0 if unknown, but probably different.
* Exchanging the order of arguments should not change the outcome.
* If you have found that A ~ B and B ~ C,
* then you may assume A ~ C regardless of this function's result.
*
* Options may be NULL.
*/
MDJVU_FUNCTION int mdjvu_match_patterns(mdjvu_pattern_t, mdjvu_pattern_t,
int32 dpi,
mdjvu_matcher_options_t);
/* Auxiliary functions used in pattern matcher (TODO: comment them) */
/* `result' and `pixels' may be the same array */
MDJVU_FUNCTION void mdjvu_soften_pattern(unsigned char **result,
unsigned char **pixels, int32 w, int32 h);
MDJVU_FUNCTION void mdjvu_get_gray_signature(
unsigned char **data, int32 w, int32 h,
unsigned char *result, int32 size);
MDJVU_FUNCTION void mdjvu_get_black_and_white_signature(
unsigned char **data, int32 w, int32 h,
unsigned char *result, int32 size);
#endif /* MDJVU_PATTERNS_H */