Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
7f33e403
Kaydet (Commit)
7f33e403
authored
Ara 20, 1996
tarafından
Roger E. Masse
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Renamed.
üst
c3573256
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
110 additions
and
84 deletions
+110
-84
imgfile.c
Modules/imgfile.c
+110
-84
No files found.
Modules/imgfile.c
Dosyayı görüntüle @
7f33e403
...
...
@@ -40,11 +40,9 @@ PERFORMANCE OF THIS SOFTWARE.
** Warning: this module is very non-reentrant (esp. the readscaled stuff)
*/
#include "allobjects.h"
#include "modsupport.h"
#include "Python.h"
#include <gl/image.h>
#include <errno.h>
#include "/usr/people/4Dgifts/iristools/include/izoom.h"
...
...
@@ -55,7 +53,7 @@ extern void filterzoom();
extern
void
putrow
();
extern
void
getrow
();
static
o
bject
*
ImgfileError
;
/* Exception we raise for various trouble */
static
PyO
bject
*
ImgfileError
;
/* Exception we raise for various trouble */
static
int
top_to_bottom
;
/* True if we want top-to-bottom images */
...
...
@@ -72,7 +70,7 @@ static void
imgfile_error
(
str
)
char
*
str
;
{
err_setstr
(
ImgfileError
,
str
);
PyErr_SetString
(
ImgfileError
,
str
);
error_called
=
1
;
return
;
/* To imglib, which will return a failure indicator */
}
...
...
@@ -93,37 +91,38 @@ imgfile_open(fname)
/* Error may already be set by imgfile_error */
if
(
!
error_called
)
{
if
(
errno
)
err_e
rrno
(
ImgfileError
);
PyErr_SetFromE
rrno
(
ImgfileError
);
else
err_setstr
(
ImgfileError
,
"Can't open image file"
);
PyErr_SetString
(
ImgfileError
,
"Can't open image file"
);
}
return
NULL
;
}
return
image
;
}
static
o
bject
*
static
PyO
bject
*
imgfile_ttob
(
self
,
args
)
o
bject
*
self
;
o
bject
*
args
;
PyO
bject
*
self
;
PyO
bject
*
args
;
{
int
newval
;
o
bject
*
rv
;
PyO
bject
*
rv
;
if
(
!
getargs
(
args
,
"i"
,
&
newval
))
if
(
!
PyArg_Parse
(
args
,
"i"
,
&
newval
))
return
NULL
;
rv
=
newintobject
(
top_to_bottom
);
rv
=
PyInt_FromLong
(
top_to_bottom
);
top_to_bottom
=
newval
;
return
rv
;
}
static
o
bject
*
static
PyO
bject
*
imgfile_read
(
self
,
args
)
o
bject
*
self
;
o
bject
*
args
;
PyO
bject
*
self
;
PyO
bject
*
args
;
{
char
*
fname
;
o
bject
*
rv
;
PyO
bject
*
rv
;
int
xsize
,
ysize
,
zsize
;
char
*
cdatap
;
long
*
idatap
;
...
...
@@ -132,7 +131,7 @@ imgfile_read(self, args)
IMAGE
*
image
;
int
yfirst
,
ylast
,
ystep
;
if
(
!
getargs
(
args
,
"s"
,
&
fname
)
)
if
(
!
PyArg_Parse
(
args
,
"s"
,
&
fname
)
)
return
NULL
;
if
(
(
image
=
imgfile_open
(
fname
))
==
NULL
)
...
...
@@ -140,12 +139,14 @@ imgfile_read(self, args)
if
(
image
->
colormap
!=
CM_NORMAL
)
{
iclose
(
image
);
err_setstr
(
ImgfileError
,
"Can only handle CM_NORMAL images"
);
PyErr_SetString
(
ImgfileError
,
"Can only handle CM_NORMAL images"
);
return
NULL
;
}
if
(
BPP
(
image
->
type
)
!=
1
)
{
iclose
(
image
);
err_setstr
(
ImgfileError
,
"Can't handle imgfiles with bpp!=1"
);
PyErr_SetString
(
ImgfileError
,
"Can't handle imgfiles with bpp!=1"
);
return
NULL
;
}
xsize
=
image
->
xsize
;
...
...
@@ -153,22 +154,24 @@ imgfile_read(self, args)
zsize
=
image
->
zsize
;
if
(
zsize
!=
1
&&
zsize
!=
3
)
{
iclose
(
image
);
err_setstr
(
ImgfileError
,
"Can only handle 1 or 3 byte pixels"
);
PyErr_SetString
(
ImgfileError
,
"Can only handle 1 or 3 byte pixels"
);
return
NULL
;
}
if
(
xsize
>
8192
)
{
iclose
(
image
);
err_setstr
(
ImgfileError
,
"Can't handle image with > 8192 columns"
);
PyErr_SetString
(
ImgfileError
,
"Can't handle image with > 8192 columns"
);
return
NULL
;
}
if
(
zsize
==
3
)
zsize
=
4
;
rv
=
newsizedstringobject
((
char
*
)
NULL
,
xsize
*
ysize
*
zsize
);
rv
=
PyString_FromStringAndSize
((
char
*
)
NULL
,
xsize
*
ysize
*
zsize
);
if
(
rv
==
NULL
)
{
iclose
(
image
);
return
NULL
;
}
cdatap
=
getstringvalue
(
rv
);
cdatap
=
PyString_AsString
(
rv
);
idatap
=
(
long
*
)
cdatap
;
if
(
top_to_bottom
)
{
...
...
@@ -197,7 +200,7 @@ imgfile_read(self, args)
}
iclose
(
image
);
if
(
error_called
)
{
DECREF
(
rv
);
Py_
DECREF
(
rv
);
return
NULL
;
}
return
rv
;
...
...
@@ -210,7 +213,7 @@ static int glob_width, glob_z, glob_ysize;
static
void
xs_get
(
buf
,
y
)
short
*
buf
;
int
y
;
int
y
;
{
if
(
top_to_bottom
)
getrow
(
glob_image
,
buf
,
(
glob_ysize
-
1
-
y
),
glob_z
);
...
...
@@ -221,7 +224,7 @@ xs_get(buf, y)
static
void
xs_put_c
(
buf
,
y
)
short
*
buf
;
int
y
;
int
y
;
{
char
*
datap
=
(
char
*
)
glob_datap
+
y
*
glob_width
;
int
width
=
glob_width
;
...
...
@@ -233,7 +236,7 @@ xs_put_c(buf, y)
static
void
xs_put_0
(
buf
,
y
)
short
*
buf
;
int
y
;
int
y
;
{
long
*
datap
=
glob_datap
+
y
*
glob_width
;
int
width
=
glob_width
;
...
...
@@ -244,7 +247,7 @@ xs_put_0(buf, y)
static
void
xs_put_12
(
buf
,
y
)
short
*
buf
;
int
y
;
int
y
;
{
long
*
datap
=
glob_datap
+
y
*
glob_width
;
int
width
=
glob_width
;
...
...
@@ -256,11 +259,11 @@ xs_put_12(buf, y)
static
void
xscale
(
image
,
xsize
,
ysize
,
zsize
,
datap
,
xnew
,
ynew
,
fmode
,
blur
)
IMAGE
*
image
;
int
xsize
,
ysize
,
zsize
;
long
*
datap
;
int
xnew
,
ynew
;
int
fmode
;
double
blur
;
int
xsize
,
ysize
,
zsize
;
long
*
datap
;
int
xnew
,
ynew
;
int
fmode
;
double
blur
;
{
glob_image
=
image
;
glob_datap
=
datap
;
...
...
@@ -268,25 +271,29 @@ xscale(image, xsize, ysize, zsize, datap, xnew, ynew, fmode, blur)
glob_ysize
=
ysize
;
if
(
zsize
==
1
)
{
glob_z
=
0
;
filterzoom
(
xs_get
,
xs_put_c
,
xsize
,
ysize
,
xnew
,
ynew
,
fmode
,
blur
);
filterzoom
(
xs_get
,
xs_put_c
,
xsize
,
ysize
,
xnew
,
ynew
,
fmode
,
blur
);
}
else
{
glob_z
=
0
;
filterzoom
(
xs_get
,
xs_put_0
,
xsize
,
ysize
,
xnew
,
ynew
,
fmode
,
blur
);
filterzoom
(
xs_get
,
xs_put_0
,
xsize
,
ysize
,
xnew
,
ynew
,
fmode
,
blur
);
glob_z
=
1
;
filterzoom
(
xs_get
,
xs_put_12
,
xsize
,
ysize
,
xnew
,
ynew
,
fmode
,
blur
);
filterzoom
(
xs_get
,
xs_put_12
,
xsize
,
ysize
,
xnew
,
ynew
,
fmode
,
blur
);
glob_z
=
2
;
filterzoom
(
xs_get
,
xs_put_12
,
xsize
,
ysize
,
xnew
,
ynew
,
fmode
,
blur
);
filterzoom
(
xs_get
,
xs_put_12
,
xsize
,
ysize
,
xnew
,
ynew
,
fmode
,
blur
);
}
}
static
o
bject
*
static
PyO
bject
*
imgfile_readscaled
(
self
,
args
)
o
bject
*
self
;
o
bject
*
args
;
PyO
bject
*
self
;
PyO
bject
*
args
;
{
char
*
fname
;
o
bject
*
rv
;
PyO
bject
*
rv
;
int
xsize
,
ysize
,
zsize
;
char
*
cdatap
;
long
*
idatap
;
...
...
@@ -308,30 +315,37 @@ imgfile_readscaled(self, args)
** extended scale algorithm in stead of simple-minded pixel drop/dup.
*/
extended
=
0
;
cnt
=
gettuples
ize
(
args
);
cnt
=
PyTuple_S
ize
(
args
);
if
(
cnt
==
5
)
{
extended
=
1
;
if
(
!
getargs
(
args
,
"(siisd)"
,
&
fname
,
&
xwtd
,
&
ywtd
,
&
filter
,
&
blur
)
)
if
(
!
PyArg_Parse
(
args
,
"(siisd)"
,
&
fname
,
&
xwtd
,
&
ywtd
,
&
filter
,
&
blur
)
)
return
NULL
;
}
else
if
(
cnt
==
4
)
{
extended
=
1
;
if
(
!
getargs
(
args
,
"(siis)"
,
&
fname
,
&
xwtd
,
&
ywtd
,
&
filter
)
)
if
(
!
PyArg_Parse
(
args
,
"(siis)"
,
&
fname
,
&
xwtd
,
&
ywtd
,
&
filter
)
)
return
NULL
;
blur
=
1
.
0
;
}
else
if
(
!
getargs
(
args
,
"(sii)"
,
&
fname
,
&
xwtd
,
&
ywtd
)
)
}
else
if
(
!
PyArg_Parse
(
args
,
"(sii)"
,
&
fname
,
&
xwtd
,
&
ywtd
)
)
return
NULL
;
/*
** Check parameters, open file and check type, rows, etc.
*/
if
(
extended
)
{
if
(
strcmp
(
filter
,
"impulse"
)
==
0
)
fmode
=
IMPULSE
;
else
if
(
strcmp
(
filter
,
"box"
)
==
0
)
fmode
=
BOX
;
else
if
(
strcmp
(
filter
,
"triangle"
)
==
0
)
fmode
=
TRIANGLE
;
else
if
(
strcmp
(
filter
,
"quadratic"
)
==
0
)
fmode
=
QUADRATIC
;
else
if
(
strcmp
(
filter
,
"gaussian"
)
==
0
)
fmode
=
GAUSSIAN
;
if
(
strcmp
(
filter
,
"impulse"
)
==
0
)
fmode
=
IMPULSE
;
else
if
(
strcmp
(
filter
,
"box"
)
==
0
)
fmode
=
BOX
;
else
if
(
strcmp
(
filter
,
"triangle"
)
==
0
)
fmode
=
TRIANGLE
;
else
if
(
strcmp
(
filter
,
"quadratic"
)
==
0
)
fmode
=
QUADRATIC
;
else
if
(
strcmp
(
filter
,
"gaussian"
)
==
0
)
fmode
=
GAUSSIAN
;
else
{
err_setstr
(
ImgfileError
,
"Unknown filter type"
);
PyErr_SetString
(
ImgfileError
,
"Unknown filter type"
);
return
NULL
;
}
}
...
...
@@ -341,12 +355,14 @@ imgfile_readscaled(self, args)
if
(
image
->
colormap
!=
CM_NORMAL
)
{
iclose
(
image
);
err_setstr
(
ImgfileError
,
"Can only handle CM_NORMAL images"
);
PyErr_SetString
(
ImgfileError
,
"Can only handle CM_NORMAL images"
);
return
NULL
;
}
if
(
BPP
(
image
->
type
)
!=
1
)
{
iclose
(
image
);
err_setstr
(
ImgfileError
,
"Can't handle imgfiles with bpp!=1"
);
PyErr_SetString
(
ImgfileError
,
"Can't handle imgfiles with bpp!=1"
);
return
NULL
;
}
xsize
=
image
->
xsize
;
...
...
@@ -354,28 +370,31 @@ imgfile_readscaled(self, args)
zsize
=
image
->
zsize
;
if
(
zsize
!=
1
&&
zsize
!=
3
)
{
iclose
(
image
);
err_setstr
(
ImgfileError
,
"Can only handle 1 or 3 byte pixels"
);
PyErr_SetString
(
ImgfileError
,
"Can only handle 1 or 3 byte pixels"
);
return
NULL
;
}
if
(
xsize
>
8192
)
{
iclose
(
image
);
err_setstr
(
ImgfileError
,
"Can't handle image with > 8192 columns"
);
PyErr_SetString
(
ImgfileError
,
"Can't handle image with > 8192 columns"
);
return
NULL
;
}
if
(
zsize
==
3
)
zsize
=
4
;
rv
=
newsizedstringobject
(
NULL
,
xwtd
*
ywtd
*
zsize
);
rv
=
PyString_FromStringAndSize
(
NULL
,
xwtd
*
ywtd
*
zsize
);
if
(
rv
==
NULL
)
{
iclose
(
image
);
return
NULL
;
}
xfac
=
(
float
)
xsize
/
(
float
)
xwtd
;
yfac
=
(
float
)
ysize
/
(
float
)
ywtd
;
cdatap
=
getstringvalue
(
rv
);
cdatap
=
PyString_AsString
(
rv
);
idatap
=
(
long
*
)
cdatap
;
if
(
extended
)
{
xscale
(
image
,
xsize
,
ysize
,
zsize
,
idatap
,
xwtd
,
ywtd
,
fmode
,
blur
);
xscale
(
image
,
xsize
,
ysize
,
zsize
,
idatap
,
xwtd
,
ywtd
,
fmode
,
blur
);
}
else
{
if
(
top_to_bottom
)
{
yfirst
=
ywtd
-
1
;
...
...
@@ -408,35 +427,35 @@ imgfile_readscaled(self, args)
}
iclose
(
image
);
if
(
error_called
)
{
DECREF
(
rv
);
Py_
DECREF
(
rv
);
return
NULL
;
}
return
rv
;
}
static
o
bject
*
static
PyO
bject
*
imgfile_getsizes
(
self
,
args
)
o
bject
*
self
;
o
bject
*
args
;
PyO
bject
*
self
;
PyO
bject
*
args
;
{
char
*
fname
;
o
bject
*
rv
;
PyO
bject
*
rv
;
IMAGE
*
image
;
if
(
!
getargs
(
args
,
"s"
,
&
fname
)
)
if
(
!
PyArg_Parse
(
args
,
"s"
,
&
fname
)
)
return
NULL
;
if
(
(
image
=
imgfile_open
(
fname
))
==
NULL
)
return
NULL
;
rv
=
mkv
alue
(
"(iii)"
,
image
->
xsize
,
image
->
ysize
,
image
->
zsize
);
rv
=
Py_BuildV
alue
(
"(iii)"
,
image
->
xsize
,
image
->
ysize
,
image
->
zsize
);
iclose
(
image
);
return
rv
;
}
static
o
bject
*
static
PyO
bject
*
imgfile_write
(
self
,
args
)
o
bject
*
self
;
o
bject
*
args
;
PyO
bject
*
self
;
PyO
bject
*
args
;
{
IMAGE
*
image
;
char
*
fname
;
...
...
@@ -450,20 +469,22 @@ imgfile_write(self, args)
int
yfirst
,
ylast
,
ystep
;
if
(
!
getargs
(
args
,
"(ss#iii)"
,
if
(
!
PyArg_Parse
(
args
,
"(ss#iii)"
,
&
fname
,
&
cdatap
,
&
len
,
&
xsize
,
&
ysize
,
&
zsize
)
)
return
NULL
;
if
(
zsize
!=
1
&&
zsize
!=
3
)
{
err_setstr
(
ImgfileError
,
"Can only handle 1 or 3 byte pixels"
);
PyErr_SetString
(
ImgfileError
,
"Can only handle 1 or 3 byte pixels"
);
return
NULL
;
}
if
(
len
!=
xsize
*
ysize
*
(
zsize
==
1
?
1
:
4
)
)
{
err_setstr
(
ImgfileError
,
"Data does not match sizes"
);
PyErr_SetString
(
ImgfileError
,
"Data does not match sizes"
);
return
NULL
;
}
if
(
xsize
>
8192
)
{
err_setstr
(
ImgfileError
,
"Can't handle image with > 8192 columns"
);
PyErr_SetString
(
ImgfileError
,
"Can't handle image with > 8192 columns"
);
return
NULL
;
}
...
...
@@ -473,9 +494,10 @@ imgfile_write(self, args)
if
(
image
==
0
)
{
if
(
!
error_called
)
{
if
(
errno
)
err_e
rrno
(
ImgfileError
);
PyErr_SetFromE
rrno
(
ImgfileError
);
else
err_setstr
(
ImgfileError
,
"Can't create image file"
);
PyErr_SetString
(
ImgfileError
,
"Can't create image file"
);
}
return
NULL
;
}
...
...
@@ -514,13 +536,13 @@ imgfile_write(self, args)
iclose
(
image
);
if
(
error_called
)
return
NULL
;
INCREF
(
None
);
return
None
;
Py_INCREF
(
Py_
None
);
return
Py_
None
;
}
static
struct
methodlist
imgfile_methods
[]
=
{
static
PyMethodDef
imgfile_methods
[]
=
{
{
"getsizes"
,
imgfile_getsizes
},
{
"read"
,
imgfile_read
},
{
"readscaled"
,
imgfile_readscaled
,
1
},
...
...
@@ -533,10 +555,14 @@ static struct methodlist imgfile_methods[] = {
void
initimgfile
()
{
object
*
m
,
*
d
;
m
=
initmodule
(
"imgfile"
,
imgfile_methods
);
d
=
getmoduledict
(
m
);
ImgfileError
=
newstringobject
(
"imgfile.error"
);
if
(
ImgfileError
==
NULL
||
dictinsert
(
d
,
"error"
,
ImgfileError
)
)
fatal
(
"can't define imgfile.error"
);
PyObject
*
m
,
*
d
;
m
=
Py_InitModule
(
"imgfile"
,
imgfile_methods
);
d
=
PyModule_GetDict
(
m
);
ImgfileError
=
PyString_FromString
(
"imgfile.error"
);
if
(
ImgfileError
==
NULL
||
PyDict_SetItemString
(
d
,
"error"
,
ImgfileError
)
)
Py_FatalError
(
"can't define imgfile.error"
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment