Mercurial > cpython-lru_cache-weakref
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 |
| rev | line source |
|---|---|
| 691 | 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 | 4 |
| 5 All Rights Reserved | |
| 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 | 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 | 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 | 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 | 29 |
| 30 ******************************************************************/ | |
| 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 | 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 | 35 ** an object of image file class, and have routines to manipulate these |
| 36 ** image files in a neater way (so you can get rgb images off a greyscale | |
| 37 ** file, for instance, or do a straight display without having to get the | |
| 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 | 41 */ |
| 42 | |
|
4809
6f8b5c3cd6cb
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4624
diff
changeset
|
43 #include "Python.h" |
| 691 | 44 |
| 45 #include <gl/image.h> | |
| 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 | 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 | 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 | 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 | 69 static void |
| 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 | 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 | 102 } |
| 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 | 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 | 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 | 205 } |
|
4809
6f8b5c3cd6cb
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4624
diff
changeset
|
206 return rv; |
| 691 | 207 } |
| 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 | 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 | 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 | 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 | 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 | 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 | 554 }; |
| 555 | |
| 556 | |
| 557 void | |
| 558 initimgfile() | |
| 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 | 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 |
