481 lines
10 KiB
C++
481 lines
10 KiB
C++
/**
|
|
* @mainpage IMB - Imbuf module external interface
|
|
*
|
|
* @section about About the IMB module
|
|
*
|
|
* External interface of the IMage Buffer module. This module offers
|
|
* import/export of several graphical file formats. It offers the
|
|
* ImBuf type as a common structure to refer to different graphical
|
|
* file formats, and to enable a uniform way of handling them.
|
|
*
|
|
* @section issues Known issues with IMB
|
|
*
|
|
* - imbuf is written in C.
|
|
* - Endianness issues are dealt with internally.
|
|
* - File I/O must be done externally. The module uses FILE*'s to
|
|
* direct input/output.
|
|
* - Platform dependency is limited. Some minor patches for
|
|
* amiga and Irix are present. A 'posix-compliancy-patch'
|
|
* provides the interface to windows.
|
|
*
|
|
* @section dependencies Dependencies
|
|
*
|
|
* IMB needs:
|
|
* - SDNA module
|
|
* The listbase types are used for handling the memory
|
|
* management.
|
|
* - blenlib module
|
|
* blenlib handles guarded memory management in blender-style.
|
|
* BLI_winstuff.h makes a few windows specific behaviours
|
|
* posix-compliant.
|
|
* - avi
|
|
* avi defines import/export to the avi format. Only anim.c
|
|
* needs this. It uses the following functions:
|
|
* - avi_close
|
|
* - avi_is_avi
|
|
* - avi_print_error
|
|
* - avi_open_movie
|
|
* - avi_read_frame
|
|
* - avi_get_stream
|
|
* Additionally, it needs the types from the avi module.
|
|
* - external jpeg library
|
|
* The jpeg lib defines import/export to the jpeg format.
|
|
* only jpeg.c needs these. Used functions are:
|
|
* - jpeg_destroy
|
|
* - jpeg_resync_to_restart
|
|
* - jpeg_set_marker_processor
|
|
* - jpeg_read_header
|
|
* - jpeg_start_decompress
|
|
* - jpeg_abort_decompress
|
|
* - jpeg_read_scanlines
|
|
* - jpeg_finish_decompress
|
|
* - jpeg_std_error
|
|
* - jpeg_create_decompress
|
|
* - jpeg_stdio_src
|
|
* - jpeg_start_compress
|
|
* - jpeg_write_marker
|
|
* - jpeg_write_scanlines
|
|
* - jpeg_finish_compress
|
|
* - jpeg_create_compress
|
|
* - jpeg_stdio_dest
|
|
* - jpeg_set_defaults
|
|
* - jpeg_set_quality
|
|
* - jpeg_destroy_compress
|
|
* Additionally, it needs the types from the jpeg lib.
|
|
*
|
|
* $Id$
|
|
*
|
|
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
|
*
|
|
* 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. The Blender
|
|
* Foundation also sells licenses for use in proprietary software under
|
|
* the Blender License. See http://www.blender.org/BL/ for information
|
|
* about this.
|
|
*
|
|
* 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.
|
|
*
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): none yet.
|
|
*
|
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
|
*/
|
|
#ifndef IMB_IMBUF_H
|
|
#define IMB_IMBUF_H
|
|
|
|
struct ImBuf;
|
|
struct anim;
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in cmap.c
|
|
*/
|
|
void cspace(struct ImBuf *ibuf, float mat[][4]);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in cmap.c
|
|
*/
|
|
void IMB_freeImBufdata(void);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in cmap.c
|
|
*/
|
|
void IMB_applycmap(struct ImBuf *ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in cmap.c
|
|
*/
|
|
short IMB_converttocmap(struct ImBuf *ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in cmap.c
|
|
*/
|
|
int IMB_alpha_to_col0(int new);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in readimage.c
|
|
*/
|
|
struct ImBuf *IMB_ibImageFromMemory(int *mem, int size, int flags);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in readimage.c
|
|
*/
|
|
struct ImBuf *IMB_testiffname(char *naam,int flags);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in readimage.c
|
|
*/
|
|
struct ImBuf *IMB_loadiffname(char *naam, int flags);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in readimage.c
|
|
*/
|
|
void freezbufImBuf(struct ImBuf * ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in allocimbuf.c
|
|
*/
|
|
void IMB_freeImBuf(struct ImBuf * ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in allocimbuf.c
|
|
*/
|
|
struct ImBuf *IMB_allocImBuf(short x, short y,
|
|
unsigned char d, unsigned int flags,
|
|
unsigned char bitmap);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in allocimbuf.c
|
|
*/
|
|
struct ImBuf *IMB_dupImBuf(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in allocimbuf.c
|
|
*/
|
|
short IMB_addzbufImBuf(struct ImBuf * ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in allocimbuf.c
|
|
*/
|
|
void IMB_freecmapImBuf(struct ImBuf * ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in rectop.c
|
|
*/
|
|
void IMB_rectop(struct ImBuf *dbuf,
|
|
struct ImBuf *sbuf,
|
|
int destx,
|
|
int desty,
|
|
int srcx,
|
|
int srcy,
|
|
int width,
|
|
int height,
|
|
void (*operation)(unsigned int *, unsigned int*, int, int),
|
|
int value);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in rectop.c
|
|
*/
|
|
void IMB_rectoptot(struct ImBuf *dbuf,
|
|
struct ImBuf *sbuf,
|
|
void (*operation)(unsigned int *, unsigned int*, int, int),
|
|
int value);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in rectop.c
|
|
*/
|
|
void IMB_rectcpy(unsigned int *drect, unsigned int *srect, int x, int dummy);
|
|
|
|
/**
|
|
* Return the length (in frames) of the given @a anim.
|
|
*/
|
|
int IMB_anim_get_duration(struct anim *anim);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in anim.c
|
|
*/
|
|
struct anim * IMB_open_anim(char * name, int ib_flags);
|
|
void IMB_close_anim(struct anim * anim);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in anim.c
|
|
*/
|
|
struct ImBuf * IMB_anim_absolute(struct anim * anim, int position);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in anim.c
|
|
*/
|
|
void IMB_free_anim(struct anim * anim);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in anim.c
|
|
*/
|
|
int IMB_isanim(char * name);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in anim.c
|
|
*/
|
|
struct ImBuf * IMB_anim_nextpic(struct anim * anim);
|
|
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in antialias.c
|
|
*/
|
|
void IMB_clever_double (struct ImBuf * ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in antialias.c
|
|
*/
|
|
void IMB_antialias(struct ImBuf * ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in filter.c
|
|
*/
|
|
void IMB_filter(struct ImBuf *ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in filter.c
|
|
*/
|
|
void IMB_filtery(struct ImBuf *ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_scaleImBuf(struct ImBuf * ibuf, short newx, short newy);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_scalefieldImBuf(struct ImBuf *ibuf, short newx, short newy);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, short newx, short newy);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in writeimage.c
|
|
*/
|
|
short IMB_saveiff(struct ImBuf *ibuf,char *naam,int flags);
|
|
|
|
/**
|
|
* This function pointer needs to be initialized to enable
|
|
* png writing from the ImBuf library.
|
|
*
|
|
* @attention Defined in writeimage.c
|
|
* @attention See also IMB_png_encode()
|
|
*/
|
|
extern short (*IMB_fp_png_encode)(struct ImBuf *ibuf, int file, int flags);
|
|
|
|
/**
|
|
* Encodes a png image from an ImBuf
|
|
*
|
|
* @attention Defined in png_encode.c
|
|
* @attention See also IMB_fp_png_encode
|
|
*/
|
|
short IMB_png_encode(struct ImBuf *ibuf, int file, int flags);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in util.c
|
|
*/
|
|
int IMB_ispic(char *name);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in divers.c
|
|
*/
|
|
void IMB_de_interlace(struct ImBuf *ibuf);
|
|
|
|
/**
|
|
* Change the ordering of the colour bytes pointed to by rect from
|
|
* rgba to abgr. size * 4 colour bytes are reordered.
|
|
*
|
|
* @attention Defined in imageprocess.c
|
|
*/
|
|
void IMB_convert_rgba_to_abgr(int size, unsigned int *rect);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_scalefastfieldImBuf(struct ImBuf *ibuf,
|
|
short newx,
|
|
short newy);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in readimage.c
|
|
* @deprecated Only here for backwards compatibility of the
|
|
* @deprecated plugin system.
|
|
*/
|
|
struct ImBuf *IMB_loadiffmem(int *mem, int flags);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in readimage.c
|
|
* @deprecated Only here for backwards compatibility of the
|
|
* @deprecated plugin system.
|
|
*/
|
|
struct ImBuf *IMB_loadifffile(int file, int flags);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_half_x(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_double_fast_x(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_double_x(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_half_y(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_double_fast_y(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_double_y(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_onethird(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in scaling.c
|
|
*/
|
|
struct ImBuf *IMB_halflace(struct ImBuf *ibuf1);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in dither.c
|
|
*/
|
|
void IMB_dit2(struct ImBuf * ibuf, short ofs, short bits);
|
|
|
|
/**
|
|
*
|
|
* @attention defined in dither.c
|
|
*/
|
|
void IMB_dit0(struct ImBuf * ibuf, short ofs, short bits);
|
|
|
|
/** Externally used vars: fortunately they do not use funny types */
|
|
|
|
/**
|
|
* boolean toggle that tells whether or not to
|
|
* scale the colour map in the y-direction.
|
|
*
|
|
* @attention declared in hamx.c
|
|
*/
|
|
extern int scalecmapY;
|
|
|
|
/**
|
|
* This 'matrix' defines the transformation from rgb to bw colour
|
|
* maps. You need to do a sort of dot-product for that. It is a matrix
|
|
* with fixed coefficients, extracted from some book.
|
|
*
|
|
* @attention Defined in matrix.h, only included in hamx.c
|
|
*/
|
|
extern float rgb_to_bw[4][4];
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in rotate.c
|
|
*/
|
|
void IMB_flipy(struct ImBuf * ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in anim.c
|
|
*/
|
|
void IMB_init_movie_pointers(void);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in cspace.c
|
|
*/
|
|
void IMB_cspace(struct ImBuf *ibuf, float mat[][4]);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in allocimbuf.c
|
|
*/
|
|
void IMB_freezbufImBuf(struct ImBuf * ibuf);
|
|
|
|
/**
|
|
*
|
|
* @attention Defined in rectop.c
|
|
*/
|
|
void IMB_rectfill(unsigned int *drect, unsigned int *srect, int x, int value);
|
|
|
|
#endif
|
|
|