mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-06-30 18:03:07 +03:00
Set colors
This commit is contained in:
parent
70ef50cf72
commit
dc89f0eaa9
|
@ -7,7 +7,9 @@ from .helper import assert_image_equal_tofile
|
||||||
|
|
||||||
def test_sanity():
|
def test_sanity():
|
||||||
|
|
||||||
ImagePalette.ImagePalette("RGB", list(range(256)) * 3)
|
palette = ImagePalette.ImagePalette("RGB", list(range(256)) * 3)
|
||||||
|
assert len(palette.colors) == 256
|
||||||
|
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
ImagePalette.ImagePalette("RGB", list(range(256)) * 2)
|
ImagePalette.ImagePalette("RGB", list(range(256)) * 2)
|
||||||
|
|
||||||
|
|
|
@ -40,13 +40,26 @@ class ImagePalette:
|
||||||
self.mode = mode
|
self.mode = mode
|
||||||
self.rawmode = None # if set, palette contains raw data
|
self.rawmode = None # if set, palette contains raw data
|
||||||
self.palette = palette or bytearray(range(256)) * len(self.mode)
|
self.palette = palette or bytearray(range(256)) * len(self.mode)
|
||||||
self.colors = {}
|
|
||||||
self.dirty = None
|
self.dirty = None
|
||||||
if (size == 0 and len(self.mode) * 256 != len(self.palette)) or (
|
if (size == 0 and len(self.mode) * 256 != len(self.palette)) or (
|
||||||
size != 0 and size != len(self.palette)
|
size != 0 and size != len(self.palette)
|
||||||
):
|
):
|
||||||
raise ValueError("wrong palette size")
|
raise ValueError("wrong palette size")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def palette(self):
|
||||||
|
return self._palette
|
||||||
|
|
||||||
|
@palette.setter
|
||||||
|
def palette(self, palette):
|
||||||
|
self._palette = palette
|
||||||
|
|
||||||
|
mode_len = len(self.mode)
|
||||||
|
self.colors = {
|
||||||
|
tuple(self.palette[i : i + mode_len]): i // mode_len
|
||||||
|
for i in range(0, len(self.palette), mode_len)
|
||||||
|
}
|
||||||
|
|
||||||
def copy(self):
|
def copy(self):
|
||||||
new = ImagePalette()
|
new = ImagePalette()
|
||||||
|
|
||||||
|
@ -54,7 +67,6 @@ class ImagePalette:
|
||||||
new.rawmode = self.rawmode
|
new.rawmode = self.rawmode
|
||||||
if self.palette is not None:
|
if self.palette is not None:
|
||||||
new.palette = self.palette[:]
|
new.palette = self.palette[:]
|
||||||
new.colors = self.colors.copy()
|
|
||||||
new.dirty = self.dirty
|
new.dirty = self.dirty
|
||||||
|
|
||||||
return new
|
return new
|
||||||
|
@ -100,14 +112,14 @@ class ImagePalette:
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
# allocate new color slot
|
# allocate new color slot
|
||||||
if isinstance(self.palette, bytes):
|
if isinstance(self.palette, bytes):
|
||||||
self.palette = bytearray(self.palette)
|
self._palette = bytearray(self.palette)
|
||||||
index = len(self.colors)
|
index = len(self.colors)
|
||||||
if index >= 256:
|
if index >= 256:
|
||||||
raise ValueError("cannot allocate more than 256 colors") from e
|
raise ValueError("cannot allocate more than 256 colors") from e
|
||||||
self.colors[color] = index
|
self.colors[color] = index
|
||||||
self.palette[index] = color[0]
|
self._palette[index] = color[0]
|
||||||
self.palette[index + 256] = color[1]
|
self._palette[index + 256] = color[1]
|
||||||
self.palette[index + 512] = color[2]
|
self._palette[index + 512] = color[2]
|
||||||
self.dirty = 1
|
self.dirty = 1
|
||||||
return index
|
return index
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user