1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

# 

# The Python Imaging Library. 

# $Id$ 

# 

# standard mode descriptors 

# 

# History: 

# 2006-03-20 fl Added 

# 

# Copyright (c) 2006 by Secret Labs AB. 

# Copyright (c) 2006 by Fredrik Lundh. 

# 

# See the README file for information on usage and redistribution. 

# 

 

# mode descriptor cache 

_modes = None 

 

 

class ModeDescriptor(object): 

"""Wrapper for mode strings.""" 

 

def __init__(self, mode, bands, basemode, basetype): 

self.mode = mode 

self.bands = bands 

self.basemode = basemode 

self.basetype = basetype 

 

def __str__(self): 

return self.mode 

 

 

def getmode(mode): 

"""Gets a mode descriptor for the given mode.""" 

global _modes 

if not _modes: 

# initialize mode cache 

 

from . import Image 

modes = {} 

# core modes 

for m, (basemode, basetype, bands) in Image._MODEINFO.items(): 

modes[m] = ModeDescriptor(m, bands, basemode, basetype) 

# extra experimental modes 

modes["RGBa"] = ModeDescriptor("RGBa", 

("R", "G", "B", "a"), "RGB", "L") 

modes["LA"] = ModeDescriptor("LA", ("L", "A"), "L", "L") 

modes["La"] = ModeDescriptor("La", ("L", "a"), "L", "L") 

modes["PA"] = ModeDescriptor("PA", ("P", "A"), "RGB", "L") 

# mapping modes 

modes["I;16"] = ModeDescriptor("I;16", "I", "L", "L") 

modes["I;16L"] = ModeDescriptor("I;16L", "I", "L", "L") 

modes["I;16B"] = ModeDescriptor("I;16B", "I", "L", "L") 

# set global mode cache atomically 

_modes = modes 

return _modes[mode]