Файл:7segment multiplexing.gif

Из Википедии, бесплатной энциклопедии

Исходный файл(1688 × 630 пкс, размер файла: 518 КБ, MIME-тип: image/gif, закольцованный, 61 фрейм, 12 с)

Краткое описание

Описание
Deutsch: Multiplexing einer 7-Segment-Anzeige.
Anzeige von "1.234" in verschiedenen Frequenzen.
Дата
Источник Собственная работа
Автор Laserlicht

Python code

#Path to Cairo Lib import os os.environ["PATH"] = r"D:\Programme\msys64\mingw64\bin" + os.pathsep + os.environ["PATH"]  import numpy as np import drawSvg as draw  ############################  #load and ransform segments #based on Coords from here: https://commons.wikimedia.org/wiki/File:7_Segment_Display_with_Labeled_Segments.svg seg = [ # X, Y         [[278.759,242.759,98.759,62.759,98.759,242.759,278.759,242.759], [520.74,556.74,556.74,520.74,484.74,484.74,520.74,556.74]], #A         [[287.759,323.759,323.759,287.759,251.759,251.759,287.759,323.759], [295.928,331.928,475.928,511.928,475.928,331.928,295.928,331.928]], #B         [[287.759,323.759,323.759,287.759,251.759,251.759,287.759,323.759], [64.427,100.427,244.427,280.427,244.427,100.427,64.427,100.427]], #C         [[278.759,242.759,98.759,62.759,98.759,242.759,278.759,242.759], [55.26,91.26,91.26,55.26,19.26,19.26,55.26,91.26]], #D         [[53.758,89.759,89.759,53.758,17.758,17.758,53.758,89.759], [64.427,100.427,244.427,280.427,244.427,100.427,64.427,100.427]], #E         [[53.758,89.758,89.758,53.758,17.758,17.758,53.758,89.758], [295.928,331.928,475.928,511.928,475.928,331.928,295.928,331.928]], #F         [[278.759,242.759,98.759,62.759,98.759,242.759,278.759,242.759], [287.927,323.928,323.928,287.927,251.927,251.927,287.927,323.928]] #G       ] seg = np.array(seg) circle = np.array([373.241, 515.74])  offs = np.array([17.758, 19.26])  circle -= offs  offs = np.repeat(offs[:, np.newaxis], 8, axis=1) offs = np.repeat(offs[np.newaxis, :, :], 7, axis=0)  seg -= offs  scale_f = 537.48 seg /= scale_f circle /= scale_f circle = np.absolute(circle + np.array([0, -1])) circle_r = 41 / scale_f  ############################  seg_decoder = {     "0": [False, True, True, True, True, True, True],     "1": [False, False, False, False, True, True, False],     "2": [True, False, True, True, False, True, True],     "3": [True, False, False, True, True, True, True],     "4": [True, True, False, False, True, True, False],     "5": [True, True, False, True, True, False, True],     "6": [True, True, True, True, True, False, True],     "7": [False, False, False, False, True, True, True],     "8": [True, True, True, True, True, True, True],     "9": [True, True, False, True, True, True, True],     "A": [True, True, True, False, True, True, True],     "B": [True, True, True, True, True, False, False],     "C": [False, True, True, True, False, False, True],     "D": [True, False, True, True, True, True, False],     "E": [True, True, True, True, False, False, True],     "F": [True, True, True, False, False, False, True],     " ": [False, False, False, False, False, False, False],     '█': [True, True, True, True, True, True, True] }  ############################  def render(text, point, column_switch, seg_switch_draw):     d = draw.Drawing(402, 150, origin=(0, 0), displayInline=False)     d.append(draw.Rectangle(0, 0, 585, 150, fill='#ffffff'))      for i in range(len(text)):         char = text[i]          seg1 = seg * 100          offs = np.array([90 * i + 4 + 50, 5])         offs = np.repeat(offs[:, np.newaxis], 8, axis=1)         offs = np.repeat(offs[np.newaxis, :, :], 7, axis=0)         seg1 += offs          color_enabled = 'green'         color_disabled = '#eeeeee'         color_wire_disabled = 'gray'         color_wire_enabled_p = 'red'         color_wire_enabled_m = 'blue'          d.append(draw.Rectangle(90 * i + 50, 0, 82, 110-0.25, fill='#cccccc', stroke='black', stroke_width=0.5))         d.append(draw.Lines(*np.ravel(seg1[0],'F'), close=False, fill=color_enabled if seg_decoder[char][6] else color_disabled, stroke='black'))         d.append(draw.Lines(*np.ravel(seg1[1],'F'), close=False, fill=color_enabled if seg_decoder[char][5] else color_disabled, stroke='black'))         d.append(draw.Lines(*np.ravel(seg1[2],'F'), close=False, fill=color_enabled if seg_decoder[char][4] else color_disabled, stroke='black'))         d.append(draw.Lines(*np.ravel(seg1[3],'F'), close=False, fill=color_enabled if seg_decoder[char][3] else color_disabled, stroke='black'))         d.append(draw.Lines(*np.ravel(seg1[4],'F'), close=False, fill=color_enabled if seg_decoder[char][2] else color_disabled, stroke='black'))         d.append(draw.Lines(*np.ravel(seg1[5],'F'), close=False, fill=color_enabled if seg_decoder[char][1] else color_disabled, stroke='black'))         d.append(draw.Lines(*np.ravel(seg1[6],'F'), close=False, fill=color_enabled if seg_decoder[char][0] else color_disabled, stroke='black'))         d.append(draw.Circle(*(circle * 100 + np.array([90 * i + 4 + 50, 5])), circle_r * 100, fill=color_enabled if point[i] else color_disabled, stroke_width=1, stroke='black'))          d.append(draw.Text(str(i + 1), 9, 90 * i + 50 + 41 - 2, 143, fill='magenta'))         d.append(draw.Line(90 * i + 50 + 41, 110, 90 * i + 50 + 41, 120, stroke=color_wire_enabled_m if column_switch[i] else color_wire_disabled, stroke_width=2, fill='none'))         d.append(draw.Line(90 * i + 50 + 41, 130, 90 * i + 50 + 41, 140, stroke=color_wire_enabled_m, stroke_width=2, fill='none'))         a = 2 if not column_switch[i] else 0         d.append(draw.Line(90 * i + 50 + 41 - 2 - a, 118, 90 * i + 50 + 41 - 2 - a, 132, stroke=color_wire_enabled_m if column_switch[i] else color_wire_disabled, stroke_width=2, fill='none'))          for j in range(8):             en = (seg_decoder[text[seg_switch_draw]] + [point[seg_switch_draw]])[j]             d.append(draw.Line(90 * i + 50, 110 / 9 * (j + 1), 90 * i + 50 - 8, 110 / 9 * (j + 1), stroke=color_wire_enabled_p if en else color_wire_disabled, stroke_width=2, fill='none'))              if i==seg_switch_draw:                 d.append(draw.Text(["DP", "A", "B", "C", "D", "E", "F", "G"][::-1][j], 9, 7, 110 / 9 * (j + 1) - 3, fill='magenta'))                 d.append(draw.Line(50 - 20, 110 / 9 * (j + 1), 50 - 10 - 20, 110 / 9 * (j + 1), stroke='red', stroke_width=2, fill='none'))                 b = 2 if not en else 0                 d.append(draw.Line(50 - 6, 110 / 9 * (j + 1) + 2 + b, 50 - 10 - 12, 110 / 9 * (j + 1) + 2 + b, stroke='red', stroke_width=2, fill='none'))                      d.setPixelScale(4.2)  # Set number of pixels per geometry unit     #d.setRenderSize(400,200)  # Alternative to setPixelScale     #d.saveSvg('example.svg')     #d.savePng('example.png')      #d.rasterize()  # Display as PNG     #d  # Display as SVG     return d  ############################  from apng import APNG import os, numpy, PIL from PIL import Image  files = [] f = 0  text = "1234" pointpos = 0  for j in range(6):   delay = 1000/2**j    for _ in range(j):     for i in range(len(text)):       fn = "R:/Temp/" + str(f).zfill(5) + ".png"        seg_switch_draw = i       column_switch = [i==x for x in range(len(text))]       point = [i==pointpos==x for x in range(len(text))]       text_masked = "".join([x if i==index else " " for index, x in enumerate(text)])        render(text_masked, point, column_switch, seg_switch_draw).savePng(fn)               #remove colors       arr = numpy.array(Image.open(fn),dtype=numpy.float)       arr = numpy.array(numpy.round(arr),dtype=numpy.uint8)       arr = numpy.bitwise_and(arr >> 4, 0x0f)       arr = numpy.bitwise_and(arr << 4, 0xff)       out = Image.fromarray(arr,mode="RGB")       out.save(fn)        files.append((fn, delay))        f += 1  #mean file, delay = files[0] w,h = Image.open(file).size N = len(text) arr = numpy.zeros((h,w,3),numpy.float) for i in range(len(text)):   file, delay = files[-i]   imarr = numpy.array(Image.open(file),dtype=numpy.float)   arr = arr+imarr/N arr = numpy.array(numpy.round(arr),dtype=numpy.uint8)  arr = numpy.bitwise_and(arr >> 4, 0x0f) #remove colors arr = numpy.bitwise_and(arr << 4, 0xff)  out = Image.fromarray(arr,mode="RGB") out.save(r"R:\Temp\avg.png") files.append((r"R:\Temp\avg.png", 5000))  im = APNG() for file, delay in files:   im.append_file(file, delay=int(delay)) im.save(r"R:\Temp\result.png")  from IPython.display import Image Image(filename=r"R:\Temp\result.png")  #apng2gif result.png result.gif 



Лицензирование

Image:

w:ru:Creative Commons
атрибуция распространение на тех же условиях
Этот файл доступен по лицензии Creative Commons Attribution-Share Alike 4.0 International
Атрибуция: Laserlicht
Вы можете свободно:
  • делиться произведением – копировать, распространять и передавать данное произведение
  • создавать производные – переделывать данное произведение
При соблюдении следующих условий:
  • атрибуция – Вы должны указать авторство, предоставить ссылку на лицензию и указать, внёс ли автор какие-либо изменения. Это можно сделать любым разумным способом, но не создавая впечатление, что лицензиат поддерживает вас или использование вами данного произведения.
  • распространение на тех же условиях – Если вы изменяете, преобразуете или создаёте иное произведение на основе данного, то обязаны использовать лицензию исходного произведения или лицензию, совместимую с исходной.

Source:

Этот файл доступен на условиях лицензии Expat License, иногда называемой Лицензией MIT:

Copyright © Laserlicht

Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:

Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.

Данное программное обеспечение предоставляется «как есть», без каких-либо гарантий, явно выраженных или подразумеваемых, включая, но не ограничиваясь гарантиями товарной пригодности, соответствия по его конкретному назначению и отсутствия нарушений прав. Ни в каком случае авторы или правообладатели не несут ответственности по искам о возмещении ущерба, убытков или других требований по действующим контрактам, деликтам или иному, возникшим из, имеющим причиной или связанным с программным обеспечением или использованием программного обеспечения или иными действиями с программным обеспечением.


Загружающему: Лицензия MIT имеет различные версии, возможно вы хотите указать лицензию более точно. Кликните на {{MIT}} для более подробной информации.

Краткие подписи

Добавьте однострочное описание того, что собой представляет этот файл

Элементы, изображённые на этом файле

изображённый объект

У этого свойства есть некоторое значение без элемента в

image/gif

530 074 байт

630 пиксель

1688 пиксель

История файла

Нажмите на дату/время, чтобы посмотреть файл, который был загружен в тот момент.

Дата/времяМиниатюраРазмерыУчастникПримечание
текущий21:58, 25 февраля 2022Миниатюра для версии от 21:58, 25 февраля 20221688 × 630 (518 КБ)Laserlichthighest speed not possible in browser...
21:54, 25 февраля 2022Миниатюра для версии от 21:54, 25 февраля 20221688 × 630 (708 КБ)LaserlichtThumb->Animation
21:40, 25 февраля 2022Миниатюра для версии от 21:40, 25 февраля 20222010 × 750 (850 КБ)LaserlichtUploaded own work with UploadWizard

Следующая страница использует этот файл:

Глобальное использование файла

Данный файл используется в следующих вики: