Mercurial > cpython-lru_cache-weakref
annotate Modules/imageop.c @ 16798:258dcafe2d0b legacy-trunk
Gustavo Niemeyer <niemeyer@conectiva.com>:
Fixed recno support (keys are integers rather than strings).
Work around DB bug that cause stdin to be closed by rnopen() when the
DB file needed to exist but did not (no longer segfaults).
This closes SF tracker patch #403445.
Also wrapped some long lines and added whitespace around operators -- FLD.
| author | Fred Drake <fdrake@acm.org> |
|---|---|
| date | Tue, 27 Feb 2001 18:56:46 +0000 |
| parents | 6f6f965c5e2d |
| children | 40631ae74b17 |
| 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 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 /* 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
|
3 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 #ifdef sun |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 #define signed |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 #endif |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
8 #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
|
9 |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
10 #if SIZEOF_INT == 4 |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
11 typedef int Py_Int32; |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
12 typedef unsigned int Py_UInt32; |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
13 #else |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
14 #if SIZEOF_LONG == 4 |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
15 typedef long Py_Int32; |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
16 typedef unsigned long Py_UInt32; |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
17 #else |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
18 #error "No 4-byte integral type" |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
19 #endif |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
20 #endif |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
21 |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 #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
|
23 #define SHORTP(cp, xmax, x, y) ((short *)(cp+2*(y*xmax+x))) |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
24 #define LONGP(cp, xmax, x, y) ((Py_Int32 *)(cp+4*(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
|
25 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
26 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
|
27 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
28 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
29 imageop_crop(PyObject *self, PyObject *args) |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
31 char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
32 short *nsp; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
33 Py_Int32 *nlp; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
34 int len, size, x, y, newx1, newx2, newy1, newy2; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
35 int ix, iy, xstep, ystep; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
36 PyObject *rv; |
|
1084
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 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
|
39 &newx1, &newy1, &newx2, &newy2) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
40 return 0; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
42 if ( size != 1 && size != 2 && size != 4 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
43 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
|
44 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
45 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
46 if ( len != size*x*y ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
47 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
48 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
49 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
50 xstep = (newx1 < newx2)? 1 : -1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
51 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
|
52 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
53 rv = PyString_FromStringAndSize(NULL, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
54 (abs(newx2-newx1)+1)*(abs(newy2-newy1)+1)*size); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
55 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
56 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
57 ncp = (char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
58 nsp = (short *)ncp; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
59 nlp = (Py_Int32 *)ncp; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
60 newy2 += ystep; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
61 newx2 += xstep; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
62 for( iy = newy1; iy != newy2; iy+=ystep ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
63 for ( ix = newx1; ix != newx2; ix+=xstep ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
64 if ( iy < 0 || iy >= y || ix < 0 || ix >= x ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
65 if ( size == 1 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
66 *ncp++ = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
67 else |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
68 *nlp++ = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
69 } else { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
70 if ( size == 1 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
71 *ncp++ = *CHARP(cp, x, ix, iy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
72 else if ( size == 2 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
73 *nsp++ = *SHORTP(cp, x, ix, iy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
74 else |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
75 *nlp++ = *LONGP(cp, x, ix, iy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
76 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
77 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
79 return rv; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 } |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
82 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
83 imageop_scale(PyObject *self, PyObject *args) |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
85 char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
86 short *nsp; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
87 Py_Int32 *nlp; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
88 int len, size, x, y, newx, newy; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
89 int ix, iy; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
90 int oix, oiy; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
91 PyObject *rv; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
93 if ( !PyArg_Parse(args, "(s#iiiii)", |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
94 &cp, &len, &size, &x, &y, &newx, &newy) ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
95 return 0; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
97 if ( size != 1 && size != 2 && size != 4 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
98 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
|
99 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
100 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
101 if ( len != size*x*y ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
102 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
103 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
104 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
106 rv = PyString_FromStringAndSize(NULL, newx*newy*size); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
107 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
108 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
109 ncp = (char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
110 nsp = (short *)ncp; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
111 nlp = (Py_Int32 *)ncp; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
112 for( iy = 0; iy < newy; iy++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
113 for ( ix = 0; ix < newx; ix++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
114 oix = ix * x / newx; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
115 oiy = iy * y / newy; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
116 if ( size == 1 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
117 *ncp++ = *CHARP(cp, x, oix, oiy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
118 else if ( size == 2 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
119 *nsp++ = *SHORTP(cp, x, oix, oiy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
120 else |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
121 *nlp++ = *LONGP(cp, x, oix, oiy); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
122 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
124 return rv; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 } |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
126 |
| 1194 | 127 /* Note: this routine can use a bit of optimizing */ |
| 128 | |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
129 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
130 imageop_tovideo(PyObject *self, PyObject *args) |
| 1194 | 131 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
132 int maxx, maxy, x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
133 int i; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
134 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
135 int width; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
136 PyObject *rv; |
| 1194 | 137 |
| 138 | |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
139 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
|
140 return 0; |
| 1194 | 141 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
142 if ( width != 1 && width != 4 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
143 PyErr_SetString(ImageopError, "Size should be 1 or 4"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
144 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
145 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
146 if ( maxx*maxy*width != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
147 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
148 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
149 } |
| 1194 | 150 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
151 rv = PyString_FromStringAndSize(NULL, len); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
152 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
153 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
154 ncp = (unsigned char *)PyString_AsString(rv); |
| 1194 | 155 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
156 if ( width == 1 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
157 memcpy(ncp, cp, maxx); /* Copy first line */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
158 ncp += maxx; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
159 for (y=1; y<maxy; y++) { /* Interpolate other lines */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
160 for(x=0; x<maxx; x++) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
161 i = y*maxx + x; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
162 *ncp++ = ((int)cp[i] + (int)cp[i-maxx]) >> 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
163 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
164 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
165 } else { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
166 memcpy(ncp, cp, maxx*4); /* Copy first line */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
167 ncp += maxx*4; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
168 for (y=1; y<maxy; y++) { /* Interpolate other lines */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
169 for(x=0; x<maxx; x++) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
170 i = (y*maxx + x)*4 + 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
171 *ncp++ = 0; /* Skip alfa comp */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
172 *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
|
173 i++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
174 *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
|
175 i++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
176 *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
|
177 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
178 } |
| 1194 | 179 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
180 return rv; |
| 1194 | 181 } |
| 182 | |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
183 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
184 imageop_grey2mono(PyObject *self, 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
|
185 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
186 int tres, x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
187 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
188 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
189 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
190 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
|
191 |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
192 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
193 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
|
194 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
|
195 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
196 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
197 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
198 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
199 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
200 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
201 rv = PyString_FromStringAndSize(NULL, (len+7)/8); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
202 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
203 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
204 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
|
205 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
206 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
207 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
208 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
209 if ( (int)cp[i] > tres ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
210 ovalue |= bit; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
211 bit >>= 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
212 if ( bit == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
213 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
214 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
215 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
216 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
217 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
218 if ( bit != 0x80 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
219 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
220 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
|
221 } |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
222 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
223 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
224 imageop_grey2grey4(PyObject *self, PyObject *args) |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
225 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
226 int x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
227 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
228 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
229 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
230 int i; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
231 int pos; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
232 |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
233 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
234 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
|
235 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
236 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
237 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
238 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
239 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
240 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
241 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
242 rv = PyString_FromStringAndSize(NULL, (len+1)/2); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
243 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
244 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
245 ncp = (unsigned char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
246 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
247 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
248 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
249 ovalue |= ((int)cp[i] & 0xf0) >> pos; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
250 pos += 4; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
251 if ( pos == 8 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
252 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
253 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
254 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
255 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
256 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
257 if ( pos != 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
258 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
259 return rv; |
|
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 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
263 imageop_grey2grey2(PyObject *self, PyObject *args) |
|
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 int x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
266 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
267 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
268 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
269 int i; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
270 int pos; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
271 |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
272 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
273 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
|
274 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
275 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
276 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
277 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
278 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
279 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
280 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
281 rv = PyString_FromStringAndSize(NULL, (len+3)/4); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
282 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
283 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
284 ncp = (unsigned char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
285 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
286 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
287 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
288 ovalue |= ((int)cp[i] & 0xc0) >> pos; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
289 pos += 2; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
290 if ( pos == 8 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
291 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
292 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
293 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
294 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
295 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
296 if ( pos != 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
297 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
298 return rv; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
299 } |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
300 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
301 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
302 imageop_dither2mono(PyObject *self, 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
|
303 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
304 int sum, x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
305 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
306 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
307 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
308 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
|
309 |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
310 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
311 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
|
312 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
|
313 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
314 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
315 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
316 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
317 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
318 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
319 rv = PyString_FromStringAndSize(NULL, (len+7)/8); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
320 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
321 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
322 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
|
323 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
324 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
325 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
326 sum = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
327 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
328 sum += cp[i]; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
329 if ( sum >= 256 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
330 sum -= 256; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
331 ovalue |= bit; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
332 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
333 bit >>= 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
334 if ( bit == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
335 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
336 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
337 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
338 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
339 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
340 if ( bit != 0x80 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
341 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
342 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
|
343 } |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
344 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
345 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
346 imageop_dither2grey2(PyObject *self, PyObject *args) |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
347 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
348 int x, y, len; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
349 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
350 unsigned char ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
351 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
352 int i; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
353 int pos; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
354 int sum = 0, nvalue; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
355 |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
356 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
357 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
|
358 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
359 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
360 if ( x*y != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
361 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
362 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
363 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
364 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
365 rv = PyString_FromStringAndSize(NULL, (len+3)/4); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
366 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
367 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
368 ncp = (unsigned char *)PyString_AsString(rv); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
369 pos = 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
370 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
371 for ( i=0; i < len; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
372 sum += cp[i]; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
373 nvalue = sum & 0x180; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
374 sum -= nvalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
375 ovalue |= nvalue >> pos; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
376 pos += 2; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
377 if ( pos == 9 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
378 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
379 ovalue = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
380 pos = 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
381 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
382 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
383 if ( pos != 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
384 *ncp++ = ovalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
385 return rv; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
386 } |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
387 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
388 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
389 imageop_mono2grey(PyObject *self, 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
|
390 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
391 int v0, v1, x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
392 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
393 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
394 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
|
395 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
396 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
|
397 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
|
398 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
399 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
400 if ( (nlen+7)/8 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
401 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
402 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
403 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
404 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
405 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
406 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
407 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
408 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
|
409 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
410 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
411 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
412 if ( *cp & bit ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
413 *ncp++ = v1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
414 else |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
415 *ncp++ = v0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
416 bit >>= 1; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
417 if ( bit == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
418 bit = 0x80; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
419 cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
420 } |
|
1132
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
421 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
422 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
|
423 } |
|
6461dac9a9f2
* mymalloc.h: always allocate one extra byte, since some malloc's
Guido van Rossum <guido@python.org>
parents:
1084
diff
changeset
|
424 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
425 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
426 imageop_grey22grey(PyObject *self, PyObject *args) |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
427 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
428 int x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
429 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
430 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
431 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
|
432 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
433 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
|
434 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
435 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
436 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
437 if ( (nlen+3)/4 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
438 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
439 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
440 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
441 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
442 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
443 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
444 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
445 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
|
446 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
447 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
448 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
449 if ( pos == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
450 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
451 pos = 8; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
452 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
453 pos -= 2; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
454 nvalue = (value >> pos) & 0x03; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
455 *ncp++ = nvalue | (nvalue << 2) | |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
456 (nvalue << 4) | (nvalue << 6); |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
457 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
458 return rv; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
459 } |
|
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
460 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
461 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
462 imageop_grey42grey(PyObject *self, PyObject *args) |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
463 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
464 int x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
465 unsigned char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
466 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
467 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
|
468 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
469 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
|
470 return 0; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
471 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
472 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
473 if ( (nlen+1)/2 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
474 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
475 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
476 } |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
477 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
478 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
479 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
480 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
481 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
|
482 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
483 pos = 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
484 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
485 if ( pos == 0 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
486 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
487 pos = 8; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
488 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
489 pos -= 4; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
490 nvalue = (value >> pos) & 0x0f; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
491 *ncp++ = nvalue | (nvalue << 4); |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
492 } |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
493 return rv; |
|
1165
d990c2b8a1e6
Added 2 and 4 bits grey formats
Jack Jansen <jack.jansen@cwi.nl>
parents:
1132
diff
changeset
|
494 } |
|
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 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
497 imageop_rgb2rgb8(PyObject *self, PyObject *args) |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
498 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
499 int x, y, len, nlen; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
500 Py_UInt32 *cp; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
501 unsigned char *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
502 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
503 int i, r, g, b; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
504 Py_UInt32 value, nvalue; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
505 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
506 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
|
507 return 0; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
508 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
509 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
510 if ( nlen*4 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
511 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
512 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
513 } |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
514 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
515 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
516 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
517 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
518 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
|
519 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
520 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
521 /* Bits in source: aaaaaaaa BBbbbbbb GGGggggg RRRrrrrr */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
522 value = *cp++; |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1330
diff
changeset
|
523 #if 0 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
524 r = (value >> 5) & 7; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
525 g = (value >> 13) & 7; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
526 b = (value >> 22) & 3; |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1330
diff
changeset
|
527 #else |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
528 r = (int) ((value & 0xff) / 255. * 7. + .5); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
529 g = (int) (((value >> 8) & 0xff) / 255. * 7. + .5); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
530 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
|
531 #endif |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
532 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
|
533 *ncp++ = (unsigned char)nvalue; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
534 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
535 return rv; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
536 } |
|
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
537 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
538 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
539 imageop_rgb82rgb(PyObject *self, 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 char *cp; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
543 Py_UInt32 *ncp; |
|
4803
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; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
546 Py_UInt32 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 != 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*4); |
|
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; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
560 ncp = (Py_UInt32 *)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: RRRBBGGG |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
564 ** 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
|
565 */ |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
566 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
567 r = (value >> 5) & 7; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
568 g = (value ) & 7; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
569 b = (value >> 3) & 3; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
570 r = (r<<5) | (r<<3) | (r>>1); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
571 g = (g<<5) | (g<<3) | (g>>1); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
572 b = (b<<6) | (b<<4) | (b<<2) | b; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
573 nvalue = r | (g<<8) | (b<<16); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
574 *ncp++ = nvalue; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
575 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
576 return rv; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
577 } |
|
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
578 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
579 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
580 imageop_rgb2grey(PyObject *self, PyObject *args) |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
581 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
582 int x, y, len, nlen; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
583 Py_UInt32 *cp; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
584 unsigned char *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
585 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
586 int i, r, g, b; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
587 Py_UInt32 value, nvalue; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
588 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
589 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
|
590 return 0; |
|
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 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
593 if ( nlen*4 != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
594 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
595 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
596 } |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
597 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
598 rv = PyString_FromStringAndSize(NULL, nlen); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
599 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
600 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
601 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
|
602 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
603 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
604 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
605 r = (value ) & 0xff; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
606 g = (value >> 8) & 0xff; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
607 b = (value >> 16) & 0xff; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
608 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
|
609 if ( nvalue > 255 ) nvalue = 255; |
|
5287
5af766a1b531
Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents:
4803
diff
changeset
|
610 *ncp++ = (unsigned char)nvalue; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
611 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
612 return rv; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
613 } |
|
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
614 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
615 static PyObject * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
616 imageop_grey2rgb(PyObject *self, PyObject *args) |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
617 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
618 int x, y, len, nlen; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
619 unsigned char *cp; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
620 Py_UInt32 *ncp; |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
621 PyObject *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
622 int i; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
623 Py_UInt32 value; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
624 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
625 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
|
626 return 0; |
|
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 nlen = x*y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
629 if ( nlen != len ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
630 PyErr_SetString(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
631 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
632 } |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
633 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
634 rv = PyString_FromStringAndSize(NULL, nlen*4); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
635 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
636 return 0; |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6367
diff
changeset
|
637 ncp = (Py_UInt32 *)PyString_AsString(rv); |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
638 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
639 for ( i=0; i < nlen; i++ ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
640 value = *cp++; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
641 *ncp++ = value | (value << 8 ) | (value << 16); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
642 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
643 return rv; |
|
1233
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
644 } |
|
b3e6a435c48f
Added converters for rgb<->rgb8 and rgb<->grey
Jack Jansen <jack.jansen@cwi.nl>
parents:
1198
diff
changeset
|
645 |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
646 /* |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
647 static object * |
|
13495
423a5b950cc9
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
648 imageop_mul(object *self, object *args) |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
649 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
650 char *cp, *ncp; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
651 int len, size, x, y; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
652 object *rv; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
653 int i; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
654 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
655 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
|
656 return 0; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
657 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
658 if ( size != 1 && size != 4 ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
659 err_setstr(ImageopError, "Size should be 1 or 4"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
660 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
661 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
662 if ( len != size*x*y ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
663 err_setstr(ImageopError, "String has incorrect length"); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
664 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
665 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
666 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
667 rv = newsizedstringobject(NULL, XXXX); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
668 if ( rv == 0 ) |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
669 return 0; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
670 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
|
671 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
672 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
673 for ( i=0; i < len; i += size ) { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
674 } |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
675 return rv; |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
676 } |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
677 */ |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
678 |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
679 static PyMethodDef imageop_methods[] = { |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
680 { "crop", imageop_crop }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
681 { "scale", imageop_scale }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
682 { "grey2mono", imageop_grey2mono }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
683 { "grey2grey2", imageop_grey2grey2 }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
684 { "grey2grey4", imageop_grey2grey4 }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
685 { "dither2mono", imageop_dither2mono }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
686 { "dither2grey2", imageop_dither2grey2 }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
687 { "mono2grey", imageop_mono2grey }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
688 { "grey22grey", imageop_grey22grey }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
689 { "grey42grey", imageop_grey42grey }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
690 { "tovideo", imageop_tovideo }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
691 { "rgb2rgb8", imageop_rgb2rgb8 }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
692 { "rgb82rgb", imageop_rgb82rgb }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
693 { "rgb2grey", imageop_rgb2grey }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
694 { "grey2rgb", imageop_grey2rgb }, |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
695 { 0, 0 } |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
696 }; |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
697 |
|
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
698 |
|
9588
38023a425e48
Add DL_EXPORT() to all modules that could possibly be used
Guido van Rossum <guido@python.org>
parents:
8129
diff
changeset
|
699 DL_EXPORT(void) |
|
13651
8a063423e0b7
Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents:
13495
diff
changeset
|
700 initimageop(void) |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
701 { |
|
4803
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
702 PyObject *m, *d; |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
703 m = Py_InitModule("imageop", imageop_methods); |
|
9965df782afc
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
704 d = PyModule_GetDict(m); |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
705 ImageopError = PyErr_NewException("imageop.error", NULL, NULL); |
|
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
706 if (ImageopError != NULL) |
|
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
707 PyDict_SetItemString(d, "error", ImageopError); |
|
1084
b755a46201f6
Added imageopmodule.c, also added them to Makefile and config.c.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
708 } |
