home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMIGA PD 1
/
AMIGA-PD-1.iso
/
Programme_zum_Heft
/
Anwendungen
/
Kurztests
/
PBM
/
ILBMTOPPM.LHA
/
src
/
ppmfloyd.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-10-25
|
2KB
|
74 lines
/* ppmfloyd.h - header file for libfloyd Floyd-Steinberg routines */
#ifndef _PPM_FLOYD_H_
#define _PPM_FLOYD_H_
#include "ppm.h"
/* PRIVATE STRUCTURE - do not access any member of it directly! */
typedef struct {
long *thisrederr, *thisgreenerr, *thisblueerr;
long *nextrederr, *nextgreenerr, *nextblueerr;
int lefttoright; /* 1 for left-to-right scan, 0 for right-to-left */
int cols, col_end;
pixel *pixrow;
pixval maxval;
int flags;
pixval red, green, blue; /* cache: values of current pixel */
} ppm_fs_info;
#define FS_ALTERNATE (1<<0)
#define FS_RANDOMINIT (1<<1)
/* Declarations of routines. */
ppm_fs_info * ppm_fs_init ARGS((int cols, pixval maxval, int flags));
void ppm_fs_free ARGS((ppm_fs_info *fi));
int ppm_fs_startrow ARGS((ppm_fs_info *fi, pixel *pixrow));
int ppm_fs_next ARGS((ppm_fs_info *fi, int col));
void ppm_fs_endrow ARGS((ppm_fs_info *fi));
void ppm_fs_update ARGS((ppm_fs_info *fi, int col, pixel *pP));
void ppm_fs_update3 ARGS((ppm_fs_info *fs, int col, pixval r, pixval g, pixval b));
#if 0 /* EXAMPLE */
void
do_something(pixels, cols, rows, maxval, use_floyd)
pixel **pixels;
int cols, rows;
pixval maxval;
int use_floyd;
{
ppm_fs_info *fi;
int row, col;
if( use_floyd )
fi = ppm_fs_init(cols, maxval, FS_ALTERNATE);
else
fi = NULL;
for( row = 0; row < rows; row++ ) {
for( col = ppm_fs_startrow(fi, pixels[row]); col < cols; col = ppm_fs_next(fi, col) ) {
pixel *pP = &pixrow[col];
/* do something with the pixel */
ppm_fs_update(fi, col, pP);
}
ppm_fs_endrow(fi);
}
ppm_fs_free(fi);
}
#endif /* 0 */
#endif /* _PPM_FLOYD_H_ */