treasurehunting2/PySDL2-0.9.5/sdl2/pixels.py
2017-05-13 11:00:53 +02:00

340 lines
16 KiB
Python

from ctypes import Structure, POINTER, c_int, c_char_p, c_float
from .dll import _bind
from .endian import SDL_BYTEORDER, SDL_BIG_ENDIAN, SDL_LIL_ENDIAN
from .stdinc import Uint8, Uint16, Uint32, SDL_bool
SDL_ALPHA_OPAQUE = 255
SDL_ALPHA_TRANSPARENT = 0
SDL_PIXELTYPE_UNKNOWN = 0
SDL_PIXELTYPE_INDEX1 = 1
SDL_PIXELTYPE_INDEX4 = 2
SDL_PIXELTYPE_INDEX8 = 3
SDL_PIXELTYPE_PACKED8 = 4
SDL_PIXELTYPE_PACKED16 = 5
SDL_PIXELTYPE_PACKED32 = 6
SDL_PIXELTYPE_ARRAYU8 = 7
SDL_PIXELTYPE_ARRAYU16 = 8
SDL_PIXELTYPE_ARRAYU32 = 9
SDL_PIXELTYPE_ARRAYF16 = 10
SDL_PIXELTYPE_ARRAYF32 = 11
SDL_BITMAPORDER_NONE = 0
SDL_BITMAPORDER_4321 = 1
SDL_BITMAPORDER_1234 = 2
SDL_PACKEDORDER_NONE = 0
SDL_PACKEDORDER_XRGB = 1
SDL_PACKEDORDER_RGBX = 2
SDL_PACKEDORDER_ARGB = 3
SDL_PACKEDORDER_RGBA = 4
SDL_PACKEDORDER_XBGR = 5
SDL_PACKEDORDER_BGRX = 6
SDL_PACKEDORDER_ABGR = 7
SDL_PACKEDORDER_BGRA = 8
SDL_ARRAYORDER_NONE = 0
SDL_ARRAYORDER_RGB = 1
SDL_ARRAYORDER_RGBA = 2
SDL_ARRAYORDER_ARGB = 3
SDL_ARRAYORDER_BGR = 4
SDL_ARRAYORDER_BGRA = 5
SDL_ARRAYORDER_ABGR = 6
SDL_PACKEDLAYOUT_NONE = 0
SDL_PACKEDLAYOUT_332 = 1
SDL_PACKEDLAYOUT_4444 = 2
SDL_PACKEDLAYOUT_1555 = 3
SDL_PACKEDLAYOUT_5551 = 4
SDL_PACKEDLAYOUT_565 = 5
SDL_PACKEDLAYOUT_8888 = 6
SDL_PACKEDLAYOUT_2101010 = 7
SDL_PACKEDLAYOUT_1010102 = 8
SDL_FOURCC = lambda a, b, c, d: (ord(a) << 0) | (ord(b) << 8) | (ord(c) << 16) | (ord(d) << 24)
SDL_DEFINE_PIXELFOURCC = SDL_FOURCC
SDL_DEFINE_PIXELFORMAT = lambda ptype, order, layout, bits, pbytes: ((1 << 28) | ((ptype) << 24) | ((order) << 20) | ((layout) << 16) | ((bits) << 8) | ((pbytes) << 0))
SDL_PIXELFLAG = lambda X: (((X) >> 28) & 0x0F)
SDL_PIXELTYPE = lambda X: (((X) >> 24) & 0x0F)
SDL_PIXELORDER = lambda X: (((X) >> 20) & 0x0F)
SDL_PIXELLAYOUT = lambda X: (((X) >> 16) & 0x0F)
SDL_BITSPERPIXEL = lambda X: (((X) >> 8) & 0xFF)
def SDL_BYTESPERPIXEL(x):
valid = (SDL_PIXELFORMAT_YUY2, SDL_PIXELFORMAT_UYVY, SDL_PIXELFORMAT_YVYU)
if SDL_ISPIXELFORMAT_FOURCC(x):
if x in valid:
return 2
else:
return 1
else:
return(((x) >> 0) & 0xFF)
def SDL_ISPIXELFORMAT_INDEXED(pformat):
"""Checks, if the passed format value is an indexed format."""
return ((not SDL_ISPIXELFORMAT_FOURCC(pformat)) and
((SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_INDEX1) or
(SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_INDEX4) or
(SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_INDEX8)))
def SDL_ISPIXELFORMAT_PACKED(pformat):
"""Checks, if the passed format value is a packed format."""
return (not SDL_ISPIXELFORMAT_FOURCC(pformat) and
((SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_PACKED8) or
(SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_PACKED16) or
(SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_PACKED32)))
def SDL_ISPIXELFORMAT_ARRAY(pformat):
"""Checks, if the passed format value is an array format."""
return (not SDL_ISPIXELFORMAT_FOURCC(pformat) and
((SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_ARRAYU8) and
(SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_ARRAYU16) or
(SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_ARRAYU32) or
(SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_ARRAYF16) or
(SDL_PIXELTYPE(pformat) == SDL_PIXELTYPE_ARRAYF32)))
def SDL_ISPIXELFORMAT_ALPHA(pformat):
"""Checks, if the passed format value is an alpha channel supporting
format.
"""
return ((SDL_ISPIXELFORMAT_PACKED(pformat) and
((SDL_PIXELORDER(pformat) == SDL_PACKEDORDER_ARGB) or
(SDL_PIXELORDER(pformat) == SDL_PACKEDORDER_RGBA) or
(SDL_PIXELORDER(pformat) == SDL_PACKEDORDER_ABGR) or
(SDL_PIXELORDER(pformat) == SDL_PACKEDORDER_BGRA))) or
(SDL_ISPIXELFORMAT_ARRAY(pformat) and
((SDL_PIXELORDER(pformat) == SDL_ARRAYORDER_ARGB) or
(SDL_PIXELORDER(pformat) == SDL_ARRAYORDER_RGBA) or
(SDL_PIXELORDER(pformat) == SDL_ARRAYORDER_ABGR) or
(SDL_PIXELORDER(pformat) == SDL_ARRAYORDER_BGRA))))
SDL_ISPIXELFORMAT_FOURCC = lambda fmt: ((fmt) and (SDL_PIXELFLAG(fmt) != 1))
SDL_PIXELFORMAT_UNKNOWN = 0
SDL_PIXELFORMAT_INDEX1LSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1,
SDL_BITMAPORDER_4321,
0, 1, 0)
SDL_PIXELFORMAT_INDEX1MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1,
SDL_BITMAPORDER_1234,
0, 1, 0)
SDL_PIXELFORMAT_INDEX4LSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4,
SDL_BITMAPORDER_4321,
0, 4, 0)
SDL_PIXELFORMAT_INDEX4MSB = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4,
SDL_BITMAPORDER_1234,
0, 4, 0)
SDL_PIXELFORMAT_INDEX8 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0,
0, 8, 1)
SDL_PIXELFORMAT_RGB332 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8,
SDL_PACKEDORDER_XRGB,
SDL_PACKEDLAYOUT_332, 8, 1)
SDL_PIXELFORMAT_RGB444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_XRGB,
SDL_PACKEDLAYOUT_4444, 12, 2)
SDL_PIXELFORMAT_RGB555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_XRGB,
SDL_PACKEDLAYOUT_1555, 15, 2)
SDL_PIXELFORMAT_BGR555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_XBGR,
SDL_PACKEDLAYOUT_1555, 15, 2)
SDL_PIXELFORMAT_ARGB4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_ARGB,
SDL_PACKEDLAYOUT_4444, 16, 2)
SDL_PIXELFORMAT_RGBA4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_RGBA,
SDL_PACKEDLAYOUT_4444, 16, 2)
SDL_PIXELFORMAT_ABGR4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_ABGR,
SDL_PACKEDLAYOUT_4444, 16, 2)
SDL_PIXELFORMAT_BGRA4444 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_BGRA,
SDL_PACKEDLAYOUT_4444, 16, 2)
SDL_PIXELFORMAT_ARGB1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_ARGB,
SDL_PACKEDLAYOUT_1555, 16, 2)
SDL_PIXELFORMAT_RGBA5551 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_RGBA,
SDL_PACKEDLAYOUT_5551, 16, 2)
SDL_PIXELFORMAT_ABGR1555 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_ABGR,
SDL_PACKEDLAYOUT_1555, 16, 2)
SDL_PIXELFORMAT_BGRA5551 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_BGRA,
SDL_PACKEDLAYOUT_5551, 16, 2)
SDL_PIXELFORMAT_RGB565 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_XRGB,
SDL_PACKEDLAYOUT_565, 16, 2)
SDL_PIXELFORMAT_BGR565 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16,
SDL_PACKEDORDER_XBGR,
SDL_PACKEDLAYOUT_565, 16, 2)
SDL_PIXELFORMAT_RGB24 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8,
SDL_ARRAYORDER_RGB, 0, 24, 3)
SDL_PIXELFORMAT_BGR24 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8,
SDL_ARRAYORDER_BGR, 0, 24, 3)
SDL_PIXELFORMAT_RGB888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32,
SDL_PACKEDORDER_XRGB,
SDL_PACKEDLAYOUT_8888, 24, 4)
SDL_PIXELFORMAT_RGBX8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32,
SDL_PACKEDORDER_RGBX,
SDL_PACKEDLAYOUT_8888, 24, 4)
SDL_PIXELFORMAT_BGR888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32,
SDL_PACKEDORDER_XBGR,
SDL_PACKEDLAYOUT_8888, 24, 4)
SDL_PIXELFORMAT_BGRX8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32,
SDL_PACKEDORDER_BGRX,
SDL_PACKEDLAYOUT_8888, 24, 4)
SDL_PIXELFORMAT_ARGB8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32,
SDL_PACKEDORDER_ARGB,
SDL_PACKEDLAYOUT_8888, 32, 4)
SDL_PIXELFORMAT_RGBA8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32,
SDL_PACKEDORDER_RGBA,
SDL_PACKEDLAYOUT_8888, 32, 4)
SDL_PIXELFORMAT_ABGR8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32,
SDL_PACKEDORDER_ABGR,
SDL_PACKEDLAYOUT_8888, 32, 4)
SDL_PIXELFORMAT_BGRA8888 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32,
SDL_PACKEDORDER_BGRA,
SDL_PACKEDLAYOUT_8888, 32, 4)
SDL_PIXELFORMAT_ARGB2101010 = SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32,
SDL_PACKEDORDER_ARGB,
SDL_PACKEDLAYOUT_2101010,
32, 4)
if SDL_BYTEORDER == SDL_BIG_ENDIAN:
SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888
SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888
SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888
SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888
else:
SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888
SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888
SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888
SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888
SDL_PIXELFORMAT_YV12 = SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2')
SDL_PIXELFORMAT_IYUV = SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V')
SDL_PIXELFORMAT_YUY2 = SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2')
SDL_PIXELFORMAT_UYVY = SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y')
SDL_PIXELFORMAT_YVYU = SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U')
SDL_PIXELFORMAT_NV12 = SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2')
SDL_PIXELFORMAT_NV21 = SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1')
ALL_PIXELFORMATS = (
SDL_PIXELFORMAT_INDEX1LSB,
SDL_PIXELFORMAT_INDEX1MSB,
SDL_PIXELFORMAT_INDEX4LSB,
SDL_PIXELFORMAT_INDEX4MSB,
SDL_PIXELFORMAT_INDEX8,
SDL_PIXELFORMAT_RGB332,
SDL_PIXELFORMAT_RGB444,
SDL_PIXELFORMAT_RGB555,
SDL_PIXELFORMAT_BGR555,
SDL_PIXELFORMAT_ARGB4444,
SDL_PIXELFORMAT_RGBA4444,
SDL_PIXELFORMAT_ABGR4444,
SDL_PIXELFORMAT_BGRA4444,
SDL_PIXELFORMAT_ARGB1555,
SDL_PIXELFORMAT_RGBA5551,
SDL_PIXELFORMAT_ABGR1555,
SDL_PIXELFORMAT_BGRA5551,
SDL_PIXELFORMAT_RGB565,
SDL_PIXELFORMAT_BGR565,
SDL_PIXELFORMAT_RGB24,
SDL_PIXELFORMAT_BGR24,
SDL_PIXELFORMAT_RGB888,
SDL_PIXELFORMAT_RGBX8888,
SDL_PIXELFORMAT_BGR888,
SDL_PIXELFORMAT_BGRX8888,
SDL_PIXELFORMAT_ARGB8888,
SDL_PIXELFORMAT_RGBA8888,
SDL_PIXELFORMAT_ABGR8888,
SDL_PIXELFORMAT_BGRA8888,
SDL_PIXELFORMAT_ARGB2101010,
SDL_PIXELFORMAT_RGBA32,
SDL_PIXELFORMAT_ARGB32,
SDL_PIXELFORMAT_BGRA32,
SDL_PIXELFORMAT_ABGR32,
SDL_PIXELFORMAT_YV12,
SDL_PIXELFORMAT_IYUV,
SDL_PIXELFORMAT_YUY2,
SDL_PIXELFORMAT_UYVY,
SDL_PIXELFORMAT_YVYU,
SDL_PIXELFORMAT_NV12,
SDL_PIXELFORMAT_NV21
)
class SDL_Color(Structure):
_fields_ = [("r", Uint8),
("g", Uint8),
("b", Uint8),
("a", Uint8),
]
def __init__(self, r=255, g=255, b=255, a=255):
super(SDL_Color, self).__init__()
self.r = r
self.g = g
self.b = b
self.a = a
def __repr__(self):
return "SDL_Color(r=%d, g=%d, b=%d, a=%d)" % (self.r, self.g, self.b,
self.a)
def __copy__(self):
return SDL_Color(self.r, self.g, self.b, self.a)
def __deepcopy__(self, memo):
return SDL_Color(self.r, self.g, self.b, self.a)
def __eq__(self, color):
return self.r == color.r and self.g == color.g and \
self.b == color.b and self.a == color.a
def __ne__(self, color):
return self.r != color.r or self.g != color.g or self.b != color.b or \
self.a != color.a
SDL_Colour = SDL_Color
class SDL_Palette(Structure):
_fields_ = [("ncolors", c_int),
("colors", POINTER(SDL_Color)),
("version", Uint32),
("refcount", c_int)]
class SDL_PixelFormat(Structure):
pass
SDL_PixelFormat._fields_ = \
[("format", Uint32),
("palette", POINTER(SDL_Palette)),
("BitsPerPixel", Uint8),
("BytesPerPixel", Uint8),
("padding", Uint8 * 2),
("Rmask", Uint32),
("Gmask", Uint32),
("Bmask", Uint32),
("Amask", Uint32),
("Rloss", Uint8),
("Gloss", Uint8),
("Bloss", Uint8),
("Aloss", Uint8),
("Rshift", Uint8),
("Gshift", Uint8),
("Bshift", Uint8),
("Ashift", Uint8),
("refcount", c_int),
("next", POINTER(SDL_PixelFormat))]
SDL_GetPixelFormatName = _bind("SDL_GetPixelFormatName", [Uint32], c_char_p)
SDL_PixelFormatEnumToMasks = _bind("SDL_PixelFormatEnumToMasks", [Uint32, POINTER(c_int), POINTER(Uint32), POINTER(Uint32), POINTER(Uint32), POINTER(Uint32)], SDL_bool)
SDL_MasksToPixelFormatEnum = _bind("SDL_MasksToPixelFormatEnum", [c_int, Uint32, Uint32, Uint32, Uint32], Uint32)
SDL_AllocFormat = _bind("SDL_AllocFormat", [Uint32], POINTER(SDL_PixelFormat))
SDL_FreeFormat = _bind("SDL_FreeFormat", [POINTER(SDL_PixelFormat)])
SDL_AllocPalette = _bind("SDL_AllocPalette", [c_int], POINTER(SDL_Palette))
SDL_SetPixelFormatPalette = _bind("SDL_SetPixelFormatPalette", [POINTER(SDL_PixelFormat), POINTER(SDL_Palette)], c_int)
SDL_SetPaletteColors = _bind("SDL_SetPaletteColors", [POINTER(SDL_Palette), POINTER(SDL_Color), c_int, c_int], c_int)
SDL_FreePalette = _bind("SDL_FreePalette", [POINTER(SDL_Palette)])
SDL_MapRGB = _bind("SDL_MapRGB", [POINTER(SDL_PixelFormat), Uint8, Uint8, Uint8], Uint32)
SDL_MapRGBA = _bind("SDL_MapRGBA", [POINTER(SDL_PixelFormat), Uint8, Uint8, Uint8, Uint8], Uint32)
SDL_GetRGB = _bind("SDL_GetRGB", [Uint32, POINTER(SDL_PixelFormat), POINTER(Uint8), POINTER(Uint8), POINTER(Uint8)])
SDL_GetRGBA = _bind("SDL_GetRGBA", [Uint32, POINTER(SDL_PixelFormat), POINTER(Uint8), POINTER(Uint8), POINTER(Uint8), POINTER(Uint8)])
SDL_CalculateGammaRamp = _bind("SDL_CalculateGammaRamp", [c_float, POINTER(Uint16)])