mirror of
https://github.com/KrisKennaway/ii-pix.git
synced 2024-11-19 08:30:48 +00:00
Mmap uncompressed distance array instead of bunzipping first. Since
we don't end up reading most of the elements again, this is faster.
This commit is contained in:
parent
45ceb9987f
commit
ebd9f94d98
23
dither.py
23
dither.py
@ -135,17 +135,16 @@ class CIE2000Distance(ColourDistance):
|
||||
"""CIE2000 delta-E distance."""
|
||||
|
||||
def __init__(self):
|
||||
with bz2.open("nearest.pickle.bz2", "rb") as f:
|
||||
self._distances = pickle.load(f)
|
||||
assert self._distances.dtype == np.uint8
|
||||
|
||||
@staticmethod
|
||||
def _flatten_rgb(rgb):
|
||||
return (rgb[..., 0] << 16) + (rgb[..., 1] << 8) + (rgb[..., 2])
|
||||
|
||||
def distance(self, rgb: np.ndarray, bit4: np.ndarray) -> np.ndarray:
|
||||
rgb24 = self._flatten_rgb(rgb)
|
||||
return self._distances[rgb24, bit4].astype(np.int)
|
||||
self._distances = np.memmap("distances.npy", mode="r+",
|
||||
dtype=np.uint8, shape=(16777216, 16))
|
||||
#
|
||||
# @staticmethod
|
||||
# def _flatten_rgb(rgb):
|
||||
# return (rgb[..., 0] << 16) + (rgb[..., 1] << 8) + (rgb[..., 2])
|
||||
#
|
||||
# def distance(self, rgb: np.ndarray, bit4: np.ndarray) -> np.ndarray:
|
||||
# rgb24 = self._flatten_rgb(rgb)
|
||||
# return self._distances[rgb24, bit4].astype(np.int)
|
||||
|
||||
|
||||
class Screen:
|
||||
@ -342,10 +341,12 @@ def open_image(screen: Screen, filename: str) -> np.ndarray:
|
||||
|
||||
# Convert to linear RGB before rescaling so that colour interpolation is
|
||||
# in linear space
|
||||
# XXX opt?
|
||||
linear = srgb_to_linear(np.array(im, dtype=np.float32))
|
||||
rescaled = Image.fromarray(
|
||||
linear.astype(np.uint8)).resize(
|
||||
(screen.X_RES, screen.Y_RES), Image.LANCZOS)
|
||||
# XXX work with malloc'ed array?
|
||||
return np.array(rescaled, dtype=np.float32)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user