Mercurial > cpython-lru_cache-weakref
annotate Modules/imageop.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 | 5af766a1b531 |
| children | 2c29b8982643 |
| rev | line source |
|---|---|
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /*********************************************************** |
|
2061
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
2055
diff
changeset
|
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
2055
diff
changeset
|
3 The Netherlands. |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 All Rights Reserved |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3344
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:
3344
diff
changeset
|
8 documentation for any purpose and without fee is hereby granted, |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
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:
3344
diff
changeset
|
10 both that copyright notice and this permission notice appear in |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
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:
3344
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:
3344
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:
3344
diff
changeset
|
14 distribution of the software without specific, written prior |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3344
diff
changeset
|
15 permission. |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3344
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:
3344
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:
3344
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:
3344
diff
changeset
|
20 |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
3344
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:
3344
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:
3344
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:
3344
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:
3344
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:
3344
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:
3344
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:
3344
diff
changeset
|
28 PERFORMANCE OF THIS SOFTWARE. |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 ******************************************************************/ |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 /* imageopmodule - Various operations on pictures */ |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 #ifdef sun |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 #define signed |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 #endif |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
38 #include "Python.h" |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 #define CHARP(cp, xmax, x, y) ((char *)(cp+y*xmax+x)) |
|
3344
3b484812acf6
Added 16-bit pixel support for some operations.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2061
diff
changeset
|
41 #define SHORTP(cp, xmax, x, y) ((short *)(cp+2*(y*xmax+x))) |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 #define LONGP(cp, xmax, x, y) ((long *)(cp+4*(y*xmax+x))) |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
44 static PyObject *ImageopError; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
46 static PyObject * |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 imageop_crop(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
48 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
49 PyObject *args; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
51 char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
52 short *nsp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
53 long *nlp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
54 int len, size, x, y, newx1, newx2, newy1, newy2; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
55 int ix, iy, xstep, ystep; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
56 PyObject *rv; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
58 if ( !PyArg_Parse(args, "(s#iiiiiii)", &cp, &len, &size, &x, &y, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
59 &newx1, &newy1, &newx2, &newy2) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
60 return 0; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
62 if ( size != 1 && size != 2 && size != 4 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
63 PyErr_SetString(ImageopError, "Size should be 1, 2 or 4"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
64 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
65 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
66 if ( len != size*x*y ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
67 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
68 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
69 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
70 xstep = (newx1 < newx2)? 1 : -1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
71 ystep = (newy1 < newy2)? 1 : -1; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
73 rv = PyString_FromStringAndSize(NULL, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
74 (abs(newx2-newx1)+1)*(abs(newy2-newy1)+1)*size); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
75 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
76 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
77 ncp = (char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
78 nsp = (short *)ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
79 nlp = (long *)ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
80 newy2 += ystep; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
81 newx2 += xstep; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
82 for( iy = newy1; iy != newy2; iy+=ystep ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
83 for ( ix = newx1; ix != newx2; ix+=xstep ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
84 if ( iy < 0 || iy >= y || ix < 0 || ix >= x ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
85 if ( size == 1 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
86 *ncp++ = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
87 else |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
88 *nlp++ = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
89 } else { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
90 if ( size == 1 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
91 *ncp++ = *CHARP(cp, x, ix, iy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
92 else if ( size == 2 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
93 *nsp++ = *SHORTP(cp, x, ix, iy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
94 else |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
95 *nlp++ = *LONGP(cp, x, ix, iy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
96 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
97 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
99 return rv; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 } |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
102 static PyObject * |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 imageop_scale(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
104 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
105 PyObject *args; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
106 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
107 char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
108 short *nsp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
109 long *nlp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
110 int len, size, x, y, newx, newy; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
111 int ix, iy; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
112 int oix, oiy; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
113 PyObject *rv; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
115 if ( !PyArg_Parse(args, "(s#iiiii)", |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
116 &cp, &len, &size, &x, &y, &newx, &newy) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
117 return 0; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
118 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
119 if ( size != 1 && size != 2 && size != 4 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
120 PyErr_SetString(ImageopError, "Size should be 1, 2 or 4"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
121 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
122 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
123 if ( len != size*x*y ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
124 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
125 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
126 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
127 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
128 rv = PyString_FromStringAndSize(NULL, newx*newy*size); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
129 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
130 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
131 ncp = (char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
132 nsp = (short *)ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
133 nlp = (long *)ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
134 for( iy = 0; iy < newy; iy++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
135 for ( ix = 0; ix < newx; ix++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
136 oix = ix * x / newx; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
137 oiy = iy * y / newy; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
138 if ( size == 1 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
139 *ncp++ = *CHARP(cp, x, oix, oiy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
140 else if ( size == 2 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
141 *nsp++ = *SHORTP(cp, x, oix, oiy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
142 else |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
143 *nlp++ = *LONGP(cp, x, oix, oiy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
144 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
146 return rv; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 } |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 |
| 1194 | 149 /* Note: this routine can use a bit of optimizing */ |
| 150 | |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
151 static PyObject * |
| 1194 | 152 imageop_tovideo(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
153 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
154 PyObject *args; |
| 1194 | 155 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
156 int maxx, maxy, x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
157 int i; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
158 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
159 int width; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
160 PyObject *rv; |
| 1194 | 161 |
| 162 | |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
163 if ( !PyArg_Parse(args, "(s#iii)", &cp, &len, &width, &maxx, &maxy) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
164 return 0; |
| 1194 | 165 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
166 if ( width != 1 && width != 4 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
167 PyErr_SetString(ImageopError, "Size should be 1 or 4"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
168 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
169 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
170 if ( maxx*maxy*width != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
171 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
172 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
173 } |
| 1194 | 174 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
175 rv = PyString_FromStringAndSize(NULL, len); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
176 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
177 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
178 ncp = (unsigned char *)PyString_AsString(rv); |
| 1194 | 179 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
180 if ( width == 1 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
181 memcpy(ncp, cp, maxx); /* Copy first line */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
182 ncp += maxx; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
183 for (y=1; y<maxy; y++) { /* Interpolate other lines */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
184 for(x=0; x<maxx; x++) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
185 i = y*maxx + x; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
186 *ncp++ = ((int)cp[i] + (int)cp[i-maxx]) >> 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
187 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
188 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
189 } else { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
190 memcpy(ncp, cp, maxx*4); /* Copy first line */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
191 ncp += maxx*4; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
192 for (y=1; y<maxy; y++) { /* Interpolate other lines */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
193 for(x=0; x<maxx; x++) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
194 i = (y*maxx + x)*4 + 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
195 *ncp++ = 0; /* Skip alfa comp */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
196 *ncp++ = ((int)cp[i] + (int)cp[i-4*maxx]) >> 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
197 i++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
198 *ncp++ = ((int)cp[i] + (int)cp[i-4*maxx]) >> 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
199 i++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
200 *ncp++ = ((int)cp[i] + (int)cp[i-4*maxx]) >> 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
201 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
202 } |
| 1194 | 203 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
204 return rv; |
| 1194 | 205 } |
| 206 | |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
207 static PyObject * |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
208 imageop_grey2mono(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
209 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
210 PyObject *args; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
211 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
212 int tres, x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
213 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
214 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
215 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
216 int i, bit; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
217 |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
218 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
219 if ( !PyArg_Parse(args, "(s#iii)", &cp, &len, &x, &y, &tres) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
220 return 0; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
221 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
222 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
223 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
224 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
225 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
226 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
227 rv = PyString_FromStringAndSize(NULL, (len+7)/8); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
228 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
229 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
230 ncp = (unsigned char *)PyString_AsString(rv); |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
231 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
232 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
233 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
234 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
235 if ( (int)cp[i] > tres ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
236 ovalue |= bit; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
237 bit >>= 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
238 if ( bit == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
239 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
240 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
241 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
242 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
243 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
244 if ( bit != 0x80 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
245 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
246 return rv; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
247 } |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
248 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
249 static PyObject * |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
250 imageop_grey2grey4(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
251 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
252 PyObject *args; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
253 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
254 int x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
255 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
256 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
257 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
258 int i; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
259 int pos; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
260 |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
261 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
262 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
263 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
264 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
265 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
266 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
267 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
268 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
269 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
270 rv = PyString_FromStringAndSize(NULL, (len+1)/2); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
271 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
272 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
273 ncp = (unsigned char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
274 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
275 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
276 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
277 ovalue |= ((int)cp[i] & 0xf0) >> pos; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
278 pos += 4; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
279 if ( pos == 8 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
280 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
281 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
282 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
283 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
284 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
285 if ( pos != 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
286 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
287 return rv; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
288 } |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
289 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
290 static PyObject * |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
291 imageop_grey2grey2(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
292 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
293 PyObject *args; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
294 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
295 int x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
296 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
297 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
298 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
299 int i; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
300 int pos; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
301 |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
302 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
303 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
304 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
305 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
306 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
307 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
308 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
309 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
310 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
311 rv = PyString_FromStringAndSize(NULL, (len+3)/4); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
312 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
313 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
314 ncp = (unsigned char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
315 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
316 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
317 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
318 ovalue |= ((int)cp[i] & 0xc0) >> pos; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
319 pos += 2; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
320 if ( pos == 8 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
321 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
322 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
323 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
324 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
325 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
326 if ( pos != 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
327 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
328 return rv; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
329 } |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
330 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
331 static PyObject * |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
332 imageop_dither2mono(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
333 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
334 PyObject *args; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
335 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
336 int sum, x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
337 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
338 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
339 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
340 int i, bit; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
341 |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
342 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
343 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
344 return 0; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
345 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
346 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
347 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
348 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
349 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
350 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
351 rv = PyString_FromStringAndSize(NULL, (len+7)/8); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
352 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
353 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
354 ncp = (unsigned char *)PyString_AsString(rv); |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
355 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
356 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
357 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
358 sum = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
359 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
360 sum += cp[i]; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
361 if ( sum >= 256 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
362 sum -= 256; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
363 ovalue |= bit; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
364 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
365 bit >>= 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
366 if ( bit == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
367 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
368 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
369 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
370 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
371 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
372 if ( bit != 0x80 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
373 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
374 return rv; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
375 } |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
376 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
377 static PyObject * |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
378 imageop_dither2grey2(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
379 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
380 PyObject *args; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
381 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
382 int x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
383 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
384 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
385 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
386 int i; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
387 int pos; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
388 int sum = 0, nvalue; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
389 |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
390 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
391 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
392 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
393 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
394 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
395 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
396 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
397 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
398 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
399 rv = PyString_FromStringAndSize(NULL, (len+3)/4); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
400 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
401 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
402 ncp = (unsigned char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
403 pos = 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
404 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
405 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
406 sum += cp[i]; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
407 nvalue = sum & 0x180; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
408 sum -= nvalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
409 ovalue |= nvalue >> pos; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
410 pos += 2; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
411 if ( pos == 9 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
412 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
413 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
414 pos = 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
415 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
416 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
417 if ( pos != 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
418 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
419 return rv; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
420 } |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
421 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
422 static PyObject * |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
423 imageop_mono2grey(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
424 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
425 PyObject *args; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
426 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
427 int v0, v1, x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
428 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
429 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
430 int i, bit; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
431 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
432 if ( !PyArg_Parse(args, "(s#iiii)", &cp, &len, &x, &y, &v0, &v1) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
433 return 0; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
434 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
435 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
436 if ( (nlen+7)/8 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
437 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
438 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
439 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
440 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
441 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
442 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
443 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
444 ncp = (unsigned char *)PyString_AsString(rv); |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
445 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
446 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
447 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
448 if ( *cp & bit ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
449 *ncp++ = v1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
450 else |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
451 *ncp++ = v0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
452 bit >>= 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
453 if ( bit == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
454 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
455 cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
456 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
457 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
458 return rv; |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
459 } |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
460 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
461 static PyObject * |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
462 imageop_grey22grey(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
463 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
464 PyObject *args; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
465 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
466 int x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
467 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
468 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
469 int i, pos, value = 0, nvalue; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
470 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
471 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
472 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
473 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
474 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
475 if ( (nlen+3)/4 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
476 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
477 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
478 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
479 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
480 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
481 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
482 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
483 ncp = (unsigned char *)PyString_AsString(rv); |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
484 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
485 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
486 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
487 if ( pos == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
488 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
489 pos = 8; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
490 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
491 pos -= 2; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
492 nvalue = (value >> pos) & 0x03; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
493 *ncp++ = nvalue | (nvalue << 2) | |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
494 (nvalue << 4) | (nvalue << 6); |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
495 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
496 return rv; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
497 } |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
498 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
499 static PyObject * |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
500 imageop_grey42grey(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
501 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
502 PyObject *args; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
503 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
504 int x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
505 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
506 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
507 int i, pos, value = 0, nvalue; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
508 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
509 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
510 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
511 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
512 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
513 if ( (nlen+1)/2 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
514 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
515 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
516 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
517 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
518 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
519 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
520 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
521 ncp = (unsigned char *)PyString_AsString(rv); |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
522 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
523 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
524 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
525 if ( pos == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
526 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
527 pos = 8; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
528 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
529 pos -= 4; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
530 nvalue = (value >> pos) & 0x0f; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
531 *ncp++ = nvalue | (nvalue << 4); |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
532 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
533 return rv; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
534 } |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
535 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
536 static PyObject * |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
537 imageop_rgb2rgb8(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
538 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
539 PyObject *args; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
540 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
541 int x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
542 unsigned long *cp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
543 unsigned char *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
544 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
545 int i, r, g, b; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
546 unsigned long value, nvalue; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
547 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
548 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
549 return 0; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
550 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
551 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
552 if ( nlen*4 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
553 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
554 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
555 } |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
556 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
557 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
558 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
559 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
560 ncp = (unsigned char *)PyString_AsString(rv); |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
561 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
562 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
563 /* Bits in source: aaaaaaaa BBbbbbbb GGGggggg RRRrrrrr */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
564 value = *cp++; |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1330
diff
changeset
|
565 #if 0 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
566 r = (value >> 5) & 7; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
567 g = (value >> 13) & 7; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
568 b = (value >> 22) & 3; |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1330
diff
changeset
|
569 #else |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
570 r = (int) ((value & 0xff) / 255. * 7. + .5); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
571 g = (int) (((value >> 8) & 0xff) / 255. * 7. + .5); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
572 b = (int) (((value >> 16) & 0xff) / 255. * 3. + .5); |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1330
diff
changeset
|
573 #endif |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
574 nvalue = (r<<5) | (b<<3) | g; |
|
5287
5af766a1b531
Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents:
4803
diff
changeset
|
575 *ncp++ = (unsigned char)nvalue; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
576 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
577 return rv; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
578 } |
|
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
579 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
580 static PyObject * |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
581 imageop_rgb82rgb(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
582 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
583 PyObject *args; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
584 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
585 int x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
586 unsigned char *cp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
587 unsigned long *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
588 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
589 int i, r, g, b; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
590 unsigned long value, nvalue; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
591 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
592 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
593 return 0; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
594 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
595 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
596 if ( nlen != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
597 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
598 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
599 } |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
600 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
601 rv = PyString_FromStringAndSize(NULL, nlen*4); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
602 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
603 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
604 ncp = (unsigned long *)PyString_AsString(rv); |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
605 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
606 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
607 /* Bits in source: RRRBBGGG |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
608 ** Red and Green are multiplied by 36.5, Blue by 85 |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
609 */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
610 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
611 r = (value >> 5) & 7; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
612 g = (value ) & 7; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
613 b = (value >> 3) & 3; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
614 r = (r<<5) | (r<<3) | (r>>1); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
615 g = (g<<5) | (g<<3) | (g>>1); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
616 b = (b<<6) | (b<<4) | (b<<2) | b; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
617 nvalue = r | (g<<8) | (b<<16); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
618 *ncp++ = nvalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
619 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
620 return rv; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
621 } |
|
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
622 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
623 static PyObject * |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
624 imageop_rgb2grey(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
625 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
626 PyObject *args; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
627 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
628 int x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
629 unsigned long *cp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
630 unsigned char *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
631 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
632 int i, r, g, b; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
633 unsigned long value, nvalue; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
634 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
635 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
636 return 0; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
637 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
638 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
639 if ( nlen*4 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
640 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
641 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
642 } |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
643 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
644 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
645 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
646 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
647 ncp = (unsigned char *)PyString_AsString(rv); |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
648 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
649 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
650 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
651 r = (value ) & 0xff; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
652 g = (value >> 8) & 0xff; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
653 b = (value >> 16) & 0xff; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
654 nvalue = (int)(0.30*r + 0.59*g + 0.11*b); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
655 if ( nvalue > 255 ) nvalue = 255; |
|
5287
5af766a1b531
Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents:
4803
diff
changeset
|
656 *ncp++ = (unsigned char)nvalue; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
657 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
658 return rv; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
659 } |
|
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
660 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
661 static PyObject * |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
662 imageop_grey2rgb(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
663 PyObject *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
664 PyObject *args; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
665 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
666 int x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
667 unsigned char *cp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
668 unsigned long *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
669 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
670 int i; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
671 unsigned long value; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
672 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
673 if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
674 return 0; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
675 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
676 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
677 if ( nlen != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
678 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
679 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
680 } |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
681 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
682 rv = PyString_FromStringAndSize(NULL, nlen*4); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
683 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
684 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
685 ncp = (unsigned long *)PyString_AsString(rv); |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
686 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
687 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
688 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
689 *ncp++ = value | (value << 8 ) | (value << 16); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
690 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
691 return rv; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
692 } |
|
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
693 |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
694 /* |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
695 static object * |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
696 imageop_mul(self, args) |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
697 object *self; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
698 object *args; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
699 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
700 char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
701 int len, size, x, y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
702 object *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
703 int i; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
704 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
705 if ( !getargs(args, "(s#iii)", &cp, &len, &size, &x, &y) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
706 return 0; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
707 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
708 if ( size != 1 && size != 4 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
709 err_setstr(ImageopError, "Size should be 1 or 4"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
710 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
711 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
712 if ( len != size*x*y ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
713 err_setstr(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
714 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
715 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
716 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
717 rv = newsizedstringobject(NULL, XXXX); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
718 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
719 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
720 ncp = (char *)getstringvalue(rv); |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
721 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
722 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
723 for ( i=0; i < len; i += size ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
724 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
725 return rv; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
726 } |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
727 */ |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
728 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
729 static PyMethodDef imageop_methods[] = { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
730 { "crop", imageop_crop }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
731 { "scale", imageop_scale }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
732 { "grey2mono", imageop_grey2mono }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
733 { "grey2grey2", imageop_grey2grey2 }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
734 { "grey2grey4", imageop_grey2grey4 }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
735 { "dither2mono", imageop_dither2mono }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
736 { "dither2grey2", imageop_dither2grey2 }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
737 { "mono2grey", imageop_mono2grey }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
738 { "grey22grey", imageop_grey22grey }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
739 { "grey42grey", imageop_grey42grey }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
740 { "tovideo", imageop_tovideo }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
741 { "rgb2rgb8", imageop_rgb2rgb8 }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
742 { "rgb82rgb", imageop_rgb82rgb }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
743 { "rgb2grey", imageop_rgb2grey }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
744 { "grey2rgb", imageop_grey2rgb }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
745 { 0, 0 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
746 }; |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
747 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
748 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
749 void |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
750 initimageop() |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
751 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
752 PyObject *m, *d; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
753 m = Py_InitModule("imageop", imageop_methods); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
754 d = PyModule_GetDict(m); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
755 ImageopError = PyString_FromString("imageop.error"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
756 if ( ImageopError == NULL || |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
757 PyDict_SetItemString(d,"error",ImageopError) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
758 Py_FatalError("can't define imageop.error"); |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
759 } |
