Файл:7segment multiplexing.gif
Из Википедии, бесплатной энциклопедии
Исходный файл (1688 × 630 пкс, размер файла: 518 КБ, MIME-тип: image/gif, закольцованный, 61 фрейм, 12 с)
Этот файл находится на Викискладе. Сведения о нём показаны ниже. Викисклад — централизованное хранилище для свободных файлов, используемых в проектах Викимедиа. Сообщить об ошибке с файлом |
Краткое описание
Описание7segment multiplexing.gif | 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:
- Вы можете свободно:
- делиться произведением – копировать, распространять и передавать данное произведение
- создавать производные – переделывать данное произведение
- При соблюдении следующих условий:
- атрибуция – Вы должны указать авторство, предоставить ссылку на лицензию и указать, внёс ли автор какие-либо изменения. Это можно сделать любым разумным способом, но не создавая впечатление, что лицензиат поддерживает вас или использование вами данного произведения.
- распространение на тех же условиях – Если вы изменяете, преобразуете или создаёте иное произведение на основе данного, то обязаны использовать лицензию исходного произведения или лицензию, совместимую с исходной.
Source:
Этот файл доступен на условиях лицензии Expat License, иногда называемой Лицензией MIT: Copyright © Laserlicht Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий: Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения. Данное программное обеспечение предоставляется «как есть», без каких-либо гарантий, явно выраженных или подразумеваемых, включая, но не ограничиваясь гарантиями товарной пригодности, соответствия по его конкретному назначению и отсутствия нарушений прав. Ни в каком случае авторы или правообладатели не несут ответственности по искам о возмещении ущерба, убытков или других требований по действующим контрактам, деликтам или иному, возникшим из, имеющим причиной или связанным с программным обеспечением или использованием программного обеспечения или иными действиями с программным обеспечением. Загружающему: Лицензия MIT имеет различные версии, возможно вы хотите указать лицензию более точно. Кликните на {{MIT}} для более подробной информации. http://opensource.org/licenses/mit-license.phpMITMIT licensetruetrueLaserlicht |
Элементы, изображённые на этом файле
изображённый объект
У этого свойства есть некоторое значение без элемента в
25 февраля 2022
image/gif
0aafdf6bfcf739840261d4eb0d1c285e12a319d4
530 074 байт
12 секунда
630 пиксель
1688 пиксель
История файла
Нажмите на дату/время, чтобы посмотреть файл, который был загружен в тот момент.
Дата/время | Миниатюра | Размеры | Участник | Примечание | |
---|---|---|---|---|---|
текущий | 21:58, 25 февраля 2022 | 1688 × 630 (518 КБ) | Laserlicht | highest speed not possible in browser... | |
21:54, 25 февраля 2022 | 1688 × 630 (708 КБ) | Laserlicht | Thumb->Animation | ||
21:40, 25 февраля 2022 | 2010 × 750 (850 КБ) | Laserlicht | Uploaded own work with UploadWizard |
Использование файла
Следующая страница использует этот файл:
Глобальное использование файла
Данный файл используется в следующих вики:
- Использование в de.wikipedia.org
- Использование в en.wikipedia.org