Mercurial > cpython-lru_cache-weakref
annotate Modules/imageop.c @ 27998:e27f58a50737 legacy-trunk
SF bug #690377: Dud footnote reference in distutils docs
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Fri, 21 Feb 2003 02:47:09 +0000 |
| parents | f66b3a3509c7 |
| children | 99891b888cfd |
| 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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
38 if ( !PyArg_ParseTuple(args, "s#iiiiiii", &cp, &len, &size, &x, &y, |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
93 if ( !PyArg_ParseTuple(args, "s#iiiii", |
|
4803
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 | |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
139 if ( !PyArg_ParseTuple(args, "s#iii", &cp, &len, &width, &maxx, &maxy) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
193 if ( !PyArg_ParseTuple(args, "s#iii", &cp, &len, &x, &y, &tres) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
234 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
273 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
311 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
357 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
396 if ( !PyArg_ParseTuple(args, "s#iiii", &cp, &len, &x, &y, &v0, &v1) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
433 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
469 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
506 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
548 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
589 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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 |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
625 if ( !PyArg_ParseTuple(args, "s#ii", &cp, &len, &x, &y) ) |
|
4803
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[] = { |
|
22772
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
680 { "crop", imageop_crop, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
681 { "scale", imageop_scale, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
682 { "grey2mono", imageop_grey2mono, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
683 { "grey2grey2", imageop_grey2grey2, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
684 { "grey2grey4", imageop_grey2grey4, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
685 { "dither2mono", imageop_dither2mono, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
686 { "dither2grey2", imageop_dither2grey2, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
687 { "mono2grey", imageop_mono2grey, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
688 { "grey22grey", imageop_grey22grey, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
689 { "grey42grey", imageop_grey42grey, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
690 { "tovideo", imageop_tovideo, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
691 { "rgb2rgb8", imageop_rgb2rgb8, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
692 { "rgb82rgb", imageop_rgb82rgb, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
693 { "rgb2grey", imageop_rgb2grey, METH_VARARGS }, |
|
59d3913a29c4
Convert more METH_OLDARGS & PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents:
21757
diff
changeset
|
694 { "grey2rgb", imageop_grey2rgb, METH_VARARGS }, |
|
4803
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 |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
22772
diff
changeset
|
699 PyMODINIT_FUNC |
|
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 } |
