First public commit.
This commit is contained in:
parent
2a48f52979
commit
4bac9d83ed
288 changed files with 18417 additions and 1076 deletions
41
lenser/apple/convert/hgr_mono.py
Normal file
41
lenser/apple/convert/hgr_mono.py
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
"""Apple II HGR monochrome: 280x192, 1 bit/pixel, black & white.
|
||||
|
||||
Universal across the Apple II+ and //e. Tone is carried entirely by dithering.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ... import dither
|
||||
from ...convert.base import Conversion, perceptual_error
|
||||
from .. import palette as apal
|
||||
|
||||
WIDTH, HEIGHT = 280, 192
|
||||
PIXEL_ASPECT = 1.0
|
||||
DATA_ADDR = 0x2000 # HGR page 1
|
||||
|
||||
|
||||
def convert(img_rgb, palette_name="mono", dither_mode="floyd",
|
||||
intensive=False, base_color=None):
|
||||
from ...palette import srgb_to_lab
|
||||
plab = apal.mono_lab() # 2 entries: black, white
|
||||
L = srgb_to_lab(img_rgb)[..., 0]
|
||||
img_mono = np.zeros((HEIGHT, WIDTH, 3))
|
||||
img_mono[..., 0] = L
|
||||
plab_mono = np.zeros((2, 3))
|
||||
plab_mono[:, 0] = plab[:, 0]
|
||||
|
||||
allowed = np.tile(np.array([0, 1]), (HEIGHT, WIDTH, 1))
|
||||
idx = dither.quantize(img_mono, allowed, plab_mono, dither_mode).astype(np.uint8)
|
||||
|
||||
data = apal.pack_hgr_mono(idx) # 8192-byte HGR buffer
|
||||
preview = (apal.MONO.astype(np.uint8))[idx]
|
||||
|
||||
return Conversion(
|
||||
mode="hgr_mono", width=WIDTH, height=HEIGHT, pixel_aspect=PIXEL_ASPECT,
|
||||
index_image=idx.astype(np.uint16), data=data, data_addr=DATA_ADDR,
|
||||
viewer="hgr", preview_rgb=preview,
|
||||
error=perceptual_error(idx, img_mono, plab_mono),
|
||||
meta={"palette": "mono", "dither": dither_mode},
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue