annotate Modules/imgfile.c @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 74c12704a0bd
children 2c29b8982643
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /***********************************************************
2061
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
3 The Netherlands.
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
8 documentation for any purpose and without fee is hereby granted,
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
10 both that copyright notice and this permission notice appear in
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
15 permission.
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ******************************************************************/
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
1022
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
32 /* IMGFILE module - Interface to sgi libimage */
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
34 /* XXX This modele should be done better at some point. It should return
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 ** an object of image file class, and have routines to manipulate these
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 ** image files in a neater way (so you can get rgb images off a greyscale
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 ** file, for instance, or do a straight display without having to get the
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 ** image bits into python, etc).
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
39 **
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
40 ** Warning: this module is very non-reentrant (esp. the readscaled stuff)
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 */
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
43 #include "Python.h"
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 #include <gl/image.h>
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
1188
584c4142c537 Use full path for izoom.h include file
Jack Jansen <jack.jansen@cwi.nl>
parents: 1187
diff changeset
47 #include "/usr/people/4Dgifts/iristools/include/izoom.h"
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
48
4624
b11d96c8075c Added a bunch of extern void decls, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4600
diff changeset
49 /* Bunch of missing extern decls; keep gcc -Wall happy... */
b11d96c8075c Added a bunch of extern void decls, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4600
diff changeset
50 extern void i_seterror();
b11d96c8075c Added a bunch of extern void decls, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4600
diff changeset
51 extern void iclose();
b11d96c8075c Added a bunch of extern void decls, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4600
diff changeset
52 extern void filterzoom();
b11d96c8075c Added a bunch of extern void decls, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4600
diff changeset
53 extern void putrow();
b11d96c8075c Added a bunch of extern void decls, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4600
diff changeset
54 extern void getrow();
b11d96c8075c Added a bunch of extern void decls, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4600
diff changeset
55
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
56 static PyObject * ImgfileError; /* Exception we raise for various trouble */
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
58 static int top_to_bottom; /* True if we want top-to-bottom images */
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
1022
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
60 /* The image library does not always call the error hander :-(,
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
61 therefore we have a global variable indicating that it was called.
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
62 It is cleared by imgfile_open(). */
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63
713
862457e0237c Improved error handling.
Guido van Rossum <guido@python.org>
parents: 691
diff changeset
64 static int error_called;
862457e0237c Improved error handling.
Guido van Rossum <guido@python.org>
parents: 691
diff changeset
65
1022
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
66
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
67 /* The error handler */
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
68
4600
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
69 static void
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
70 imgfile_error(str)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
71 char *str;
713
862457e0237c Improved error handling.
Guido van Rossum <guido@python.org>
parents: 691
diff changeset
72 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
73 PyErr_SetString(ImgfileError, str);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
74 error_called = 1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
75 return; /* To imglib, which will return a failure indicator */
713
862457e0237c Improved error handling.
Guido van Rossum <guido@python.org>
parents: 691
diff changeset
76 }
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77
1022
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
78
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
79 /* Open an image file and return a pointer to it.
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
80 Make sure we raise an exception if we fail. */
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
81
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
82 static IMAGE *
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
83 imgfile_open(fname)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
84 char *fname;
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
85 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
86 IMAGE *image;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
87 i_seterror(imgfile_error);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
88 error_called = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
89 errno = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
90 if ( (image = iopen(fname, "r")) == NULL ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
91 /* Error may already be set by imgfile_error */
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
92 if ( !error_called ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
93 if (errno)
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
94 PyErr_SetFromErrno(ImgfileError);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
95 else
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
96 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
97 "Can't open image file");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
98 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
99 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
100 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
101 return image;
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 }
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
103
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
104 static PyObject *
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
105 imgfile_ttob(self, args)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
106 PyObject *self;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
107 PyObject *args;
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
108 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
109 int newval;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
110 PyObject *rv;
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
111
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
112 if (!PyArg_Parse(args, "i", &newval))
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
113 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
114 rv = PyInt_FromLong(top_to_bottom);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
115 top_to_bottom = newval;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
116 return rv;
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
117 }
1022
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
118
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
119 static PyObject *
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 imgfile_read(self, args)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
121 PyObject *self;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
122 PyObject *args;
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
124 char *fname;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
125 PyObject *rv;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
126 int xsize, ysize, zsize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
127 char *cdatap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
128 long *idatap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
129 static short rs[8192], gs[8192], bs[8192];
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
130 int x, y;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
131 IMAGE *image;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
132 int yfirst, ylast, ystep;
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
133
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
134 if ( !PyArg_Parse(args, "s", &fname) )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
135 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
136
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
137 if ( (image = imgfile_open(fname)) == NULL )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
138 return NULL;
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
139
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
140 if ( image->colormap != CM_NORMAL ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
141 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
142 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
143 "Can only handle CM_NORMAL images");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
144 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
145 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
146 if ( BPP(image->type) != 1 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
147 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
148 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
149 "Can't handle imgfiles with bpp!=1");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
150 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
151 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
152 xsize = image->xsize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
153 ysize = image->ysize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
154 zsize = image->zsize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
155 if ( zsize != 1 && zsize != 3) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
156 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
157 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
158 "Can only handle 1 or 3 byte pixels");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
159 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
160 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
161 if ( xsize > 8192 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
162 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
163 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
164 "Can't handle image with > 8192 columns");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
165 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
166 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
167
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
168 if ( zsize == 3 ) zsize = 4;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
169 rv = PyString_FromStringAndSize((char *)NULL, xsize*ysize*zsize);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
170 if ( rv == NULL ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
171 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
172 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
173 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
174 cdatap = PyString_AsString(rv);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
175 idatap = (long *)cdatap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
176
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
177 if (top_to_bottom) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
178 yfirst = ysize-1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
179 ylast = -1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
180 ystep = -1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
181 } else {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
182 yfirst = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
183 ylast = ysize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
184 ystep = 1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
185 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
186 for ( y=yfirst; y != ylast && !error_called; y += ystep ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
187 if ( zsize == 1 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
188 getrow(image, rs, y, 0);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
189 for(x=0; x<xsize; x++ )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
190 *cdatap++ = rs[x];
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
191 } else {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
192 getrow(image, rs, y, 0);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
193 getrow(image, gs, y, 1);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
194 getrow(image, bs, y, 2);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
195 for(x=0; x<xsize; x++ )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
196 *idatap++ = (rs[x] & 0xff) |
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
197 ((gs[x] & 0xff)<<8) |
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
198 ((bs[x] & 0xff)<<16);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
199 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
200 }
1022
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
201 iclose(image);
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
202 if ( error_called ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
203 Py_DECREF(rv);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
204 return NULL;
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 }
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
206 return rv;
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 }
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
208
1313
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
209 static IMAGE *glob_image;
6ee380349c84 * Added gmtime/localtime/mktime and SYSV timezone globals to timemodule.c.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
210 static long *glob_datap;
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
211 static int glob_width, glob_z, glob_ysize;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
212
4600
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
213 static void
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
214 xs_get(buf, y)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
215 short *buf;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
216 int y;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
217 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
218 if (top_to_bottom)
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
219 getrow(glob_image, buf, (glob_ysize-1-y), glob_z);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
220 else
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
221 getrow(glob_image, buf, y, glob_z);
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
222 }
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
223
4600
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
224 static void
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
225 xs_put_c(buf, y)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
226 short *buf;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
227 int y;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
228 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
229 char *datap = (char *)glob_datap + y*glob_width;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
230 int width = glob_width;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
231
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
232 while ( width-- )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
233 *datap++ = (*buf++) & 0xff;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
234 }
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
235
4600
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
236 static void
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
237 xs_put_0(buf, y)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
238 short *buf;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
239 int y;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
240 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
241 long *datap = glob_datap + y*glob_width;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
242 int width = glob_width;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
243
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
244 while ( width-- )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
245 *datap++ = (*buf++) & 0xff;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
246 }
4600
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
247 static void
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
248 xs_put_12(buf, y)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
249 short *buf;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
250 int y;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
251 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
252 long *datap = glob_datap + y*glob_width;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
253 int width = glob_width;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
254
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
255 while ( width-- )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
256 *datap++ |= ((*buf++) & 0xff) << (glob_z*8);
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
257 }
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
258
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
259 static void
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
260 xscale(image, xsize, ysize, zsize, datap, xnew, ynew, fmode, blur)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
261 IMAGE *image;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
262 int xsize, ysize, zsize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
263 long *datap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
264 int xnew, ynew;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
265 int fmode;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
266 double blur;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
267 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
268 glob_image = image;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
269 glob_datap = datap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
270 glob_width = xnew;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
271 glob_ysize = ysize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
272 if ( zsize == 1 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
273 glob_z = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
274 filterzoom(xs_get, xs_put_c, xsize, ysize,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
275 xnew, ynew, fmode, blur);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
276 } else {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
277 glob_z = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
278 filterzoom(xs_get, xs_put_0, xsize, ysize,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
279 xnew, ynew, fmode, blur);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
280 glob_z = 1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
281 filterzoom(xs_get, xs_put_12, xsize, ysize,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
282 xnew, ynew, fmode, blur);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
283 glob_z = 2;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
284 filterzoom(xs_get, xs_put_12, xsize, ysize,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
285 xnew, ynew, fmode, blur);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
286 }
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
287 }
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
288
1022
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
289
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
290 static PyObject *
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
291 imgfile_readscaled(self, args)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
292 PyObject *self;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
293 PyObject *args;
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
294 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
295 char *fname;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
296 PyObject *rv;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
297 int xsize, ysize, zsize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
298 char *cdatap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
299 long *idatap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
300 static short rs[8192], gs[8192], bs[8192];
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
301 int x, y;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
302 int xwtd, ywtd, xorig, yorig;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
303 float xfac, yfac;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
304 int cnt;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
305 IMAGE *image;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
306 char *filter;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
307 double blur;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
308 int extended;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
309 int fmode = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
310 int yfirst, ylast, ystep;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
311
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
312 /*
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
313 ** Parse args. Funny, since arg 4 and 5 are optional
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
314 ** (filter name and blur factor). Also, 4 or 5 arguments indicates
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
315 ** extended scale algorithm in stead of simple-minded pixel drop/dup.
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
316 */
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
317 extended = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
318 cnt = PyTuple_Size(args);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
319 if ( cnt == 5 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
320 extended = 1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
321 if ( !PyArg_Parse(args, "(siisd)",
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
322 &fname, &xwtd, &ywtd, &filter, &blur) )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
323 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
324 } else if ( cnt == 4 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
325 extended = 1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
326 if ( !PyArg_Parse(args, "(siis)",
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
327 &fname, &xwtd, &ywtd, &filter) )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
328 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
329 blur = 1.0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
330 } else if ( !PyArg_Parse(args, "(sii)", &fname, &xwtd, &ywtd) )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
331 return NULL;
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
332
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
333 /*
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
334 ** Check parameters, open file and check type, rows, etc.
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
335 */
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
336 if ( extended ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
337 if ( strcmp(filter, "impulse") == 0 )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
338 fmode = IMPULSE;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
339 else if ( strcmp( filter, "box") == 0 )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
340 fmode = BOX;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
341 else if ( strcmp( filter, "triangle") == 0 )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
342 fmode = TRIANGLE;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
343 else if ( strcmp( filter, "quadratic") == 0 )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
344 fmode = QUADRATIC;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
345 else if ( strcmp( filter, "gaussian") == 0 )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
346 fmode = GAUSSIAN;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
347 else {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
348 PyErr_SetString(ImgfileError, "Unknown filter type");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
349 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
350 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
351 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
352
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
353 if ( (image = imgfile_open(fname)) == NULL )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
354 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
355
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
356 if ( image->colormap != CM_NORMAL ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
357 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
358 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
359 "Can only handle CM_NORMAL images");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
360 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
361 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
362 if ( BPP(image->type) != 1 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
363 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
364 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
365 "Can't handle imgfiles with bpp!=1");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
366 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
367 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
368 xsize = image->xsize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
369 ysize = image->ysize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
370 zsize = image->zsize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
371 if ( zsize != 1 && zsize != 3) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
372 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
373 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
374 "Can only handle 1 or 3 byte pixels");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
375 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
376 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
377 if ( xsize > 8192 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
378 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
379 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
380 "Can't handle image with > 8192 columns");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
381 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
382 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
383
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
384 if ( zsize == 3 ) zsize = 4;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
385 rv = PyString_FromStringAndSize(NULL, xwtd*ywtd*zsize);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
386 if ( rv == NULL ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
387 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
388 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
389 }
5120
a48f3678f9e1 Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents: 4809
diff changeset
390 PyFPE_START_PROTECT("readscaled", return 0)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
391 xfac = (float)xsize/(float)xwtd;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
392 yfac = (float)ysize/(float)ywtd;
5197
74c12704a0bd New form of PyFPE_END_PROTECT macro.
Guido van Rossum <guido@python.org>
parents: 5120
diff changeset
393 PyFPE_END_PROTECT(yfac)
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
394 cdatap = PyString_AsString(rv);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
395 idatap = (long *)cdatap;
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
396
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
397 if ( extended ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
398 xscale(image, xsize, ysize, zsize,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
399 idatap, xwtd, ywtd, fmode, blur);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
400 } else {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
401 if (top_to_bottom) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
402 yfirst = ywtd-1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
403 ylast = -1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
404 ystep = -1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
405 } else {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
406 yfirst = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
407 ylast = ywtd;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
408 ystep = 1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
409 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
410 for ( y=yfirst; y != ylast && !error_called; y += ystep ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
411 yorig = (int)(y*yfac);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
412 if ( zsize == 1 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
413 getrow(image, rs, yorig, 0);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
414 for(x=0; x<xwtd; x++ ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
415 *cdatap++ = rs[(int)(x*xfac)];
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
416 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
417 } else {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
418 getrow(image, rs, yorig, 0);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
419 getrow(image, gs, yorig, 1);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
420 getrow(image, bs, yorig, 2);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
421 for(x=0; x<xwtd; x++ ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
422 xorig = (int)(x*xfac);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
423 *idatap++ = (rs[xorig] & 0xff) |
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
424 ((gs[xorig] & 0xff)<<8) |
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
425 ((bs[xorig] & 0xff)<<16);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
426 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
427 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
428 }
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
429 }
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
430 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
431 if ( error_called ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
432 Py_DECREF(rv);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
433 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
434 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
435 return rv;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
436 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
437
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
438 static PyObject *
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
439 imgfile_getsizes(self, args)
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
440 PyObject *self;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
441 PyObject *args;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
442 {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
443 char *fname;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
444 PyObject *rv;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
445 IMAGE *image;
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
446
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
447 if ( !PyArg_Parse(args, "s", &fname) )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
448 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
449
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
450 if ( (image = imgfile_open(fname)) == NULL )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
451 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
452 rv = Py_BuildValue("(iii)", image->xsize, image->ysize, image->zsize);
1022
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
453 iclose(image);
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
454 return rv;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
455 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
456
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
457 static PyObject *
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
458 imgfile_write(self, args)
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
459 PyObject *self;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
460 PyObject *args;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
461 {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
462 IMAGE *image;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
463 char *fname;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
464 int xsize, ysize, zsize, len;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
465 char *cdatap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
466 long *idatap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
467 short rs[8192], gs[8192], bs[8192];
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
468 short r, g, b;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
469 long rgb;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
470 int x, y;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
471 int yfirst, ylast, ystep;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
472
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
473
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
474 if ( !PyArg_Parse(args, "(ss#iii)",
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
475 &fname, &cdatap, &len, &xsize, &ysize, &zsize) )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
476 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
477
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
478 if ( zsize != 1 && zsize != 3 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
479 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
480 "Can only handle 1 or 3 byte pixels");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
481 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
482 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
483 if ( len != xsize * ysize * (zsize == 1 ? 1 : 4) ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
484 PyErr_SetString(ImgfileError, "Data does not match sizes");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
485 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
486 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
487 if ( xsize > 8192 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
488 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
489 "Can't handle image with > 8192 columns");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
490 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
491 }
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
492
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
493 error_called = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
494 errno = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
495 image =iopen(fname, "w", RLE(1), 3, xsize, ysize, zsize);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
496 if ( image == 0 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
497 if ( ! error_called ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
498 if (errno)
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
499 PyErr_SetFromErrno(ImgfileError);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
500 else
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
501 PyErr_SetString(ImgfileError,
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
502 "Can't create image file");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
503 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
504 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
505 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
506
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
507 idatap = (long *)cdatap;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
508
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
509 if (top_to_bottom) {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
510 yfirst = ysize-1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
511 ylast = -1;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
512 ystep = -1;
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
513 } else {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
514 yfirst = 0;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
515 ylast = ysize;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
516 ystep = 1;
1347
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
517 }
a22a350d3a5d * Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents: 1313
diff changeset
518 for ( y=yfirst; y != ylast && !error_called; y += ystep ) {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
519 if ( zsize == 1 ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
520 for( x=0; x<xsize; x++ )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
521 rs[x] = *cdatap++;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
522 putrow(image, rs, y, 0);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
523 } else {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
524 for( x=0; x<xsize; x++ ) {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
525 rgb = *idatap++;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
526 r = rgb & 0xff;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
527 g = (rgb >> 8 ) & 0xff;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
528 b = (rgb >> 16 ) & 0xff;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
529 rs[x] = r;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
530 gs[x] = g;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
531 bs[x] = b;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
532 }
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
533 putrow(image, rs, y, 0);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
534 putrow(image, gs, y, 1);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
535 putrow(image, bs, y, 2);
1187
6a077c293986 Added (optional) better scaling to readscaled
Jack Jansen <jack.jansen@cwi.nl>
parents: 1022
diff changeset
536 }
886
9a05e2bfa74c added readscaled() function.
Guido van Rossum <guido@python.org>
parents: 795
diff changeset
537 }
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
538 iclose(image);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
539 if ( error_called )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
540 return NULL;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
541 Py_INCREF(Py_None);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
542 return Py_None;
988
197a2cf3a662 Added method to write image files.
Jack Jansen <jack.jansen@cwi.nl>
parents: 886
diff changeset
543
197a2cf3a662 Added method to write image files.
Jack Jansen <jack.jansen@cwi.nl>
parents: 886
diff changeset
544 }
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
545
1022
9b566ac38c2b Got rid the bogus cache code and fix some unchecked errors.
Guido van Rossum <guido@python.org>
parents: 992
diff changeset
546
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
547 static PyMethodDef imgfile_methods[] = {
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
548 { "getsizes", imgfile_getsizes },
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
549 { "read", imgfile_read },
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
550 { "readscaled", imgfile_readscaled, 1},
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
551 { "write", imgfile_write },
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
552 { "ttob", imgfile_ttob },
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
553 { NULL, NULL } /* Sentinel */
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
554 };
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
555
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
556
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
557 void
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
558 initimgfile()
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
559 {
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
560 PyObject *m, *d;
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
561 m = Py_InitModule("imgfile", imgfile_methods);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
562 d = PyModule_GetDict(m);
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
563 ImgfileError = PyString_FromString("imgfile.error");
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
564 if ( ImgfileError == NULL
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
565 || PyDict_SetItemString(d, "error", ImgfileError) )
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
566 Py_FatalError("can't define imgfile.error");
691
d6fa64cec410 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
567 }
4809
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
568
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
569
6f8b5c3cd6cb Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4624
diff changeset
570