Browse Source

TTkImage: added FullBlock, HalfBlock rasterizer

pull/99/head 0.25.0-a
Eugenio Parodi 3 years ago
parent
commit
a790b38099
  1. 59
      TermTk/TTkWidgets/image.py

59
TermTk/TTkWidgets/image.py

@ -27,17 +27,38 @@ from TermTk.TTkCore.string import TTkString
from TermTk.TTkWidgets.widget import TTkWidget
class TTkImage(TTkWidget):
__slots__ = ('_data')
FULLBLOCK = 0x00
HALFBLOCK = 0x01
QUADBLOCK = 0x02
# SEXBLOCK = 0x03
__slots__ = ('_data', '_rasterType')
def __init__(self, *args, **kwargs):
TTkWidget.__init__(self, *args, **kwargs)
self._name = kwargs.get('name' , 'TTkImage' )
self._rasterType = kwargs.get('rasteriser' , TTkImage.QUADBLOCK )
self._data = kwargs.get('data' , [] )
if self._data:
w = min(len(i) for i in self._data)
h = len(self._data)
self.setData(self._data)
def setData(self, data):
self._data = data
w = min(len(i) for i in self._data)
h = len(self._data)
if self._rasterType == TTkImage.FULLBLOCK:
self.resize(w,h)
elif self._rasterType == TTkImage.HALFBLOCK:
self.resize(w,h//2)
elif self._rasterType == TTkImage.QUADBLOCK:
self.resize(w//2,h//2)
self.update()
def setRasteriser(self, rasteriser):
if self._rasterType == rasteriser: return
self._rasterType = rasteriser
if self._data:
self.setData(self._data)
def _reduce(self, a,b,c,d):
def _reduceQuad(self, a,b,c,d):
# quadblitter notcurses like
l = (a,b,c,d)
def delta(i):
@ -110,10 +131,24 @@ class TTkImage(TTkWidget):
def paintEvent(self):
img = self._data
for y in range(0, len(img)&(~1), 2):
for x in range(0, min(len(img[y])&(~1),len(img[y+1])&(~1)), 2):
self._canvas.drawText(
pos=(x//2,y//2),
text=self._reduce(
img[y][x] , img[y][x+1] ,
img[y+1][x] , img[y+1][x+1] ))
if self._rasterType == TTkImage.FULLBLOCK:
for y in range(0, len(img)):
for x in range(0, len(img[y])):
c1 = img[y][x]
color = TTkColor.fg(f'#{c1[0]:02X}{c1[1]:02X}{c1[2]:02X}')
self._canvas.drawChar(pos=(x,y), char='', color=color)
elif self._rasterType == TTkImage.HALFBLOCK:
for y in range(0, len(img)&(~1), 2):
for x in range(0, len(img[y])):
c1, c2 = img[y][x] ,img[y+1][x]
color = ( TTkColor.fg(f'#{c1[0]:02X}{c1[1]:02X}{c1[2]:02X}') +
TTkColor.bg(f'#{c2[0]:02X}{c2[1]:02X}{c2[2]:02X}') )
self._canvas.drawChar(pos=(x,y//2), char='', color=color)
elif self._rasterType == TTkImage.QUADBLOCK:
for y in range(0, len(img)&(~1), 2):
for x in range(0, min(len(img[y])&(~1),len(img[y+1])&(~1)), 2):
self._canvas.drawText(
pos=(x//2,y//2),
text=self._reduceQuad(
img[y][x] , img[y][x+1] ,
img[y+1][x] , img[y+1][x+1] ))

Loading…
Cancel
Save