| /* @(#) Function which prints in stdout the values of a picture |
| * @(#) |
| * @(#) For debuging only |
| * @(#) is either memory mapped or in a buffer. |
| * @(#) |
| * @(#) void |
| * @(#) im_debugim( in ) |
| * @(#) IMAGE *in; |
| * @(#) |
| * |
| * Copyright: 1991 N. Dessipris |
| * |
| * Author: N. Dessipris |
| * Written on: 18/03/1991 |
| * Modified on: |
| * 15/4/93 J.Cupitt |
| * - returns int, not void now, so error messages work |
| * - detects im->data invalid. |
| * 15/4/93 J.Cupitt |
| * - uses %g format, not %f for printf() |
| * 23/7/93 JC |
| * - im_incheck() added |
| */ |
| |
| /* |
| |
| This file is part of VIPS. |
| |
| VIPS 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 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 Lesser General Public License for more details. |
| |
| You should have received a copy of the GNU Lesser 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 |
| |
| */ |
| |
| /* |
| |
| These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk |
| |
| */ |
| |
| #ifdef HAVE_CONFIG_H |
| #include <config.h> |
| #endif /*HAVE_CONFIG_H*/ |
| #include <vips/intl.h> |
| |
| #include <stdio.h> |
| |
| #include <vips/vips.h> |
| |
| #ifdef WITH_DMALLOC |
| #include <dmalloc.h> |
| #endif /*WITH_DMALLOC*/ |
| |
| int |
| im_debugim( IMAGE *in ) |
| { |
| /* Check our args. */ |
| if( im_incheck( in ) ) |
| return( -1 ); |
| if( in->Coding != IM_CODING_NONE ) { |
| im_error( "im_debugim", "%s", _( "input must be uncoded" ) ); |
| return( -1 ); |
| } |
| |
| /* What type? First define the loop we want to perform for all types. */ |
| #define loopuc(TYPE) \ |
| { TYPE *p = (TYPE *) in->data; \ |
| int x, y, z; \ |
| \ |
| for ( y=0; y<in->Ysize; y++ ) {\ |
| for ( x=0; x<in->Xsize; x++ ) {\ |
| for ( z=0; z<in->Bands; z++ ) {\ |
| fprintf(stderr, "%4d", (TYPE)*p++ );\ |
| } \ |
| } \ |
| fprintf(stderr, "\n");\ |
| } \ |
| } |
| |
| #define loop(TYPE) \ |
| { TYPE *p = (TYPE *) in->data; \ |
| int x, y, z; \ |
| \ |
| for ( y=0; y<in->Ysize; y++ ) {\ |
| for ( x=0; x<in->Xsize; x++ ) {\ |
| for ( z=0; z<in->Bands; z++ ) {\ |
| fprintf(stderr, "%g\t", (double)*p++ );\ |
| } \ |
| } \ |
| fprintf(stderr, "\n");\ |
| } \ |
| } |
| |
| #define loopcmplx(TYPE) \ |
| { TYPE *p = (TYPE *) in->data; \ |
| int x, y, z; \ |
| \ |
| for ( y=0; y<in->Ysize; y++ ) {\ |
| for ( x=0; x<in->Xsize; x++ ) {\ |
| for ( z=0; z<in->Bands; z++ ) {\ |
| fprintf(stderr,"re=%g\t",(double)*p++);\ |
| fprintf(stderr,"im=%g\t",(double)*p++);\ |
| } \ |
| } \ |
| fprintf(stderr, "\n");\ |
| } \ |
| } |
| |
| /* Now generate code for all types. */ |
| switch( in->BandFmt ) { |
| case IM_BANDFMT_UCHAR: loopuc(unsigned char); break; |
| case IM_BANDFMT_CHAR: loop(char); break; |
| case IM_BANDFMT_USHORT: loop(unsigned short); break; |
| case IM_BANDFMT_SHORT: loop(short); break; |
| case IM_BANDFMT_UINT: loop(unsigned int); break; |
| case IM_BANDFMT_INT: loop(int); break; |
| case IM_BANDFMT_FLOAT: loop(float); break; |
| case IM_BANDFMT_DOUBLE: loop(double); break; |
| case IM_BANDFMT_COMPLEX: loopcmplx(float); break; |
| case IM_BANDFMT_DPCOMPLEX: loopcmplx(double); break; |
| |
| default: |
| im_error( "im_debugim", "%s", _( "unknown input format") ); |
| return( -1 ); |
| } |
| |
| return( 0 ); |
| } |