фото
-
ИМЯ
- фото — полноцветные изображения
- СИНОПС
- ОПИСАНИЕ
- СОЗДАНИЕ ФОТО
-
-данные строка
- -формат имя_формата
- -файл имя
- -гамма значение
- -высота число
- -палитра спецификация_палитры
- -ширина число
- -формат имя_формата
-
имяИзображения пусто
- имяИзображения cget опция
- имяИзображения configure ?опция? ?значение опция значение ...?
- имяИзображения копировать исходноеИзображение ?опция значение(и) ...?
-
-от x1 y1 x2 y2
- -до x1 y1 x2 y2
- -сжатие
- -масштабирование x y
- -подвыборка x y
- -правило композиции правило
- -до x1 y1 x2 y2
- имяИзображения данные ?опция значение(и) ...?
-
-фон цвет
- -формат имя_формата
- -от x1 y1 x2 y2
- -оттенки серого
- -формат имя_формата
- имяИзображения получить x y
- имяИзображения поместить данные ?опция значение(и) ...?
-
-формат имя_формата
- -до x1 y1 ?x2 y2?
- имяИзображения читать имя_файла ?опция значение(и) ...?
-
-формат имя_формата
- -от x1 y1 x2 y2
- -сжатие
- -до x y
- -от x1 y1 x2 y2
- имяИзображения повторноедитерирование
- имяИзображения прозрачность подкоманда ?аргумент аргумент ...?
-
имяИзображения прозрачность получить x y
- имяИзображения прозрачность установить x y логическое_значение
- имяИзображения записать имя_файла ?опция значение(и) ...?
-
-фон цвет
- -формат имя_формата
- -от x1 y1 x2 y2
- -оттенки серого
- -формат имя_формата
- имяИзображения cget опция
Имя
фото — полноцветные изображенияСинопсис
image create photo ?имя? ?опции?имяИзображения пусто
имяИзображения cget опция
имяИзображения configure ?опция? ?значение опция значение ...?
имяИзображения копировать исходноеИзображение ?опция значение(и) ...?
имяИзображения данные ?опция значение(и) ...?
имяИзображения получить x y
имяИзображения поместить данные ?опция значение(и) ...?
имяИзображения читать имя_файла ?опция значение(и) ...?
имяИзображения повторноедитерирование
имяИзображения прозрачность подкоманда ?аргумент аргумент ...?
имяИзображения записать имя_файла ?опция значение(и) ...?
Описание
Фото — это изображение, пиксели которого могут отображать любой цвет или быть прозрачными. Фотографическое изображение хранится внутри в полном цвете (32 бита на пиксель) и отображается с помощью дитерирования при необходимости. Данные изображения фото можно получить из файла или строки, или их можно предоставить из кода C через процедурный интерфейс. В настоящее время поддерживаются только форматы PNG, GIF и PPM/PGM, но существует интерфейс для легкого добавления других форматов файлов изображений. Фотографическое изображение прозрачно в областях, где отсутствуют данные изображения или где оно было установлено прозрачным подкомандой transparency set.Создание фото
Как и все изображения, фотографии создаются с помощью команды image create. Фотографии поддерживают следующие опции:- -данные строка
- Указывает содержимое изображения в виде строки. Строка должна содержать двоичные данные или, для некоторых форматов, данные в кодировке base64 (это в настоящее время гарантировано поддерживается для изображений PNG и GIF). Формат строки должен быть одним из тех, для которых существует обработчик формата файла изображения, который будет принимать данные в виде строки. Если оба параметра -данные и -файл указаны, параметр -файл имеет приоритет.
- -формат имя_формата
- Указывает имя формата файла для данных, указанных с помощью параметров -данные или -файл.
- -файл имя
- имя указывает имя файла, который должен быть прочитан для предоставления данных для фотоизображения. Формат файла должен быть одним из тех, для которых существует обработчик формата файла изображения, способный читать данные.
- -гамма значение
- Указывает, что цвета, выделенные для отображения этого изображения в окне, должны быть скорректированы для нелинейного дисплея со значением показателя гаммы. (Интенсивность, производимая большинством CRT-дисплеев, является степенной функцией входного значения, с хорошим приближением; гамма является показателем и обычно составляет около 2). Указанное значение должно быть больше нуля. Значение по умолчанию равно единице (без коррекции). В общем случае значения, большие единицы, сделают изображение светлее, а значения меньше единицы — темнее.
- -высота число
- Указывает высоту изображения в пикселях. Этот параметр полезен в основном в ситуациях, когда пользователь хочет по частям формировать содержимое изображения. Значение ноль (по умолчанию) позволяет изображению увеличиваться или уменьшаться по вертикали, чтобы соответствовать данным, хранящимся в нем.
- -палитра спецификация_палитры
- Указывает разрешение цветовой куба, выделенного для отображения этого изображения, и, следовательно, количество цветов, используемых из цветовых палитр окон, где оно отображается. Строка спецификация_палитры может быть либо одним десятичным числом, указывающим количество оттенков серого, либо тремя десятичными числами, разделенными слешами (/), указывающими количество оттенков красного, зеленого и синего соответственно. Если используется первая форма (одно число), изображение будет отображаться в монохромном виде (т. е. в оттенках серого).
- -ширина число
- Указывает ширину изображения в пикселях. Этот параметр полезен в основном в ситуациях, когда пользователь хочет по частям формировать содержимое изображения. Значение ноль (по умолчанию) позволяет изображению увеличиваться или уменьшаться по горизонтали, чтобы соответствовать данным, хранящимся в нем.
Команда изображения
При создании изображения фото Tk также создает новую команду с тем же именем, что и изображение. Эта команда может быть использована для вызова различных операций над изображением. Она имеет следующий общий вид:imageName option ?arg arg ...?Опция и аргументы определяют точное поведение команды.
Опции, которые записывают данные в изображение, как правило, увеличивают размер изображения, если это необходимо, чтобы вместить данные, записанные в изображение, если пользователь не указал ненулевых значений для параметров конфигурации -ширина и/или -высота, в этом случае ширина и/или высота изображения соответственно не будут изменены.
Возможны следующие команды для фотоизображений:
- imageName blank
- Очищает изображение; то есть устанавливает всё изображение без данных, так что оно будет отображаться как прозрачное, и фон того окна, в котором оно отображается, будет виден сквозь него.
- imageName cget option
- Возвращает текущее значение конфигурационного параметра, заданного option. Option может принимать любые значения, которые допускаются командой image create photo.
- imageName configure ?option? ?value option value ...?
- Запрашивает или изменяет конфигурационные параметры изображения. Если option не указан, возвращает список, описывающий все доступные параметры для imageName (см. Tk_ConfigureInfo для получения информации о формате этого списка). Если option указан без value, то команда возвращает список, описывающий один заданный параметр (этот список будет идентичен соответствующему подсписку возвращаемого значения, если option не указан). Если указаны одна или несколько пар option-value, то команда изменяет заданный(ые) параметр(ы) на заданное(ые) значение(я); в этом случае команда возвращает пустую строку. Option может принимать любые значения, которые допускаются командой image create photo.
- imageName copy sourceImage ?option value(s) ...?
- Копирует область из изображения с именем sourceImage (которое должно быть изображением типа photo) в изображение с именем imageName, возможно с масштабированием пикселей и/или субдискретизацией. Если не указаны параметры, эта команда копирует всё изображение sourceImage в imageName, начиная с координат (0,0) в imageName. Можно указать следующие параметры:
- -from x1 y1 x2 y2
- Определяет прямоугольную подобласть исходного изображения, подлежащую копированию. (x1,y1) и (x2,y2) определяют диагонально противоположные углы прямоугольника. Если x2 и y2 не указаны, значение по умолчанию — нижний правый угол исходного изображения. Копируемые пиксели будут включать левую и верхнюю границы заданного прямоугольника, но не нижнюю и правую границы. Если параметр -from не указан, значение по умолчанию — всё исходное изображение.
- -to x1 y1 x2 y2
- Определяет прямоугольную подобласть целевого изображения, подлежащую изменению. (x1,y1) и (x2,y2) определяют диагонально противоположные углы прямоугольника. Если x2 и y2 не указаны, значение по умолчанию — (x1,y1) плюс размер области источника (после субдискретизации и масштабирования, если указано). Если x2 и y2 указаны, область источника будет дублироваться при необходимости, чтобы заполнить область назначения в виде мозаики.
- -shrink
- Указывает, что размер целевого изображения должен быть уменьшен, если необходимо, так, чтобы область, в которую копируется, находилась в правом нижнем углу изображения. Этот параметр не повлияет на ширину или высоту изображения, если пользователь задал ненулевое значение для параметра конфигурации -width или -height соответственно.
- -zoom x y
- Указывает, что область источника должна быть увеличена в x раз по оси X и y раз по оси Y. Если y не указан, значение по умолчанию такое же, как x. С этим параметром каждый пиксель в исходном изображении будет преобразован в блок из x x y пикселей в целевом изображении, все одинакового цвета. x и y должны быть больше 0.
- -subsample x y
- Указывает, что размер исходного изображения должен быть уменьшен путём использования только каждого x-го пикселя по оси X и y-го пикселя по оси Y. Отрицательные значения приведут к зеркальному отражению изображения относительно осей Y или X соответственно. Если y не указан, значение по умолчанию такое же, как x.
- -compositingrule rule
- Указывает, как прозрачные пиксели в исходном изображении комбинируются с целевым изображением. При заданном правиле компоновки overlay старое содержимое целевого изображения видно, как будто исходное изображение было напечатано на прозрачной плёнке и наложено поверх целевого. При заданном правиле компоновки set старое содержимое целевого изображения отбрасывается, и исходное изображение используется как есть. Правило компоновки по умолчанию — overlay.
- imageName data ?option value(s) ...?
- Возвращает данные изображения в виде строки. Можно указать следующие параметры:
- -background color
- Если цвет указан, данные не будут содержать никакой информации о прозрачности. Во всех прозрачных пикселях цвет будет заменён указанным цветом.
- -format format-name
- Указывает имя обработчика формата файла изображения, который будет использоваться. В частности, эта подкоманда ищет первый обработчик, чьё имя соответствует начальному подстроке format-name и который имеет возможность записать строку, содержащую эти данные изображения. Если этот параметр не указан, эта подкоманда использует формат, состоящий из списка (один элемент на строку) списков (один элемент на пиксель/столбец) цветов в формате «#rrggbb» (где rr — пара шестнадцатеричных цифр для красного канала, gg для зелёного, и bb для синего).
- -from x1 y1 x2 y2
- Определяет прямоугольную область imageName, которая должна быть возвращена. Если указаны только x1 и y1, область простирается от (x1,y1) до правого нижнего угла imageName. Если указаны все четыре координаты, они определяют диагонально противоположные углы прямоугольной области, включая x1,y1 и исключая x2,y2. По умолчанию, если этот параметр не указан, используется всё изображение.
- -grayscale
- Если этот параметр указан, данные не будут содержать информации о цвете. Все данные пикселей будут преобразованы в градации серого.
- imageName get x y
- Возвращает цвет пикселя в координатах (x,y) в изображении как список из трёх целых чисел от 0 до 255, представляющих соответственно красный, зелёный и синий компоненты.
- imageName put data ?option value(s) ...?
- Устанавливает пиксели в imageName на данные, указанные в data. Эта команда сначала ищет в списке обработчиков форматов файлов изображений обработчик, который может интерпретировать данные в data, а затем считывает закодированное в них изображение в imageName (целевое изображение). Если data не соответствует никакому известному формату, делается попытка интерпретировать его как список строк сканирования (сверху вниз), причём каждая строка сканирования — это список цветов пикселей (слева направо) (см. Tk_GetColor для описания допустимых цветов). Все строки сканирования должны быть одинаковой длины. Обратите внимание, что когда data — это одно имя цвета, вы указываете Tk заполнить прямоугольную область этим цветом. Можно указать следующие параметры:
- -format format-name
- Указывает формат данных изображения в data. В частности, будут использоваться только обработчики форматов файлов изображений, имена которых начинаются с format-name, при поиске обработчика формата данных изображения для чтения данных.
- -to x1 y1 ?x2 y2?
- Указывает координаты верхнего левого угла (x1,y1) области imageName, в которую будут скопированы данные изображения. По умолчанию — (0,0). Если заданы x2,y2, а data недостаточно велика, чтобы покрыть прямоугольник, указанный этим параметром, данные изображения будут повторяться для того, чтобы покрыть весь прямоугольник назначения. Заметьте, что если data указывает одно значение цвета, то область, простирающаяся до правого нижнего угла, задаваемого (x2,y2), будет заполнена этим цветом.
- imageName read filename ?option value(s) ...?
- Считывает данные изображения из файла с именем filename в изображение. Эта команда сначала ищет в списке обработчиков форматов файлов изображений обработчик, который может интерпретировать данные в filename, а затем считывает изображение из filename в imageName (целевое изображение). Можно указать следующие параметры:
- -format format-name
- Указывает формат данных изображения в filename. В частности, будут использоваться только обработчики форматов файлов изображений, имена которых начинаются с format-name, при поиске обработчика формата данных изображения для чтения данных.
- -from x1 y1 x2 y2
- Определяет прямоугольную подобласть данных изображения в файле для копирования в целевое изображение. Если указаны только x1 и y1, область простирается от (x1,y1) до правого нижнего угла изображения в файле изображения. Если указаны все четыре координаты, они определяют диагонально противоположные углы области. По умолчанию, если этот параметр не указан, используется всё изображение в файле изображения.
- -shrink
- Если указан этот параметр, размер imageName будет уменьшен, если необходимо, так что область, в которую считываются данные файла изображения, будет в правом нижнем углу imageName. Этот параметр не повлияет на ширину или высоту изображения, если пользователь задал ненулевое значение для параметра конфигурации -width или -height соответственно.
- -to x y
- Указывает координаты верхнего левого угла области imageName, в которую будут считываться данные из filename. По умолчанию — (0,0).
- imageName redither
- Алгоритм дизеринга, используемый при отображении изображений типа photo, распространяет ошибки квантования от одного пикселя к его соседям. Если данные изображения imageName поставляются частями, дизерированное изображение может быть не совсем корректным. Обычно разница незаметна, но если это проблема, эту команду можно использовать для повторного вычисления дизерированного изображения в каждом окне, где отображается изображение.
- imageName transparency subcommand ?arg arg ...?
- Позволяет просматривать и изменять информацию о прозрачности в изображении типа photo. Доступны несколько подкоманд:
- imageName transparency get x y
- Возвращает логическое значение, указывающее, является ли пиксель в координатах (x,y) прозрачным.
- imageName transparency set x y boolean
- Делает пиксель в координатах (x,y) прозрачным, если boolean — истина, и непрозрачным в противном случае.
- imageName write filename ?option value(s) ...?
- Записывает данные изображения из imageName в файл с именем filename. Можно указать следующие параметры:
- -background цвет
- Если цвет указан, данные не будут содержать информацию о прозрачности. В всех прозрачных пикселях цвет будет заменен указанным цветом.
- -format имя_формата
- Указывает имя обработчика формата файла изображения, который будет использоваться для записи данных в файл. В частности, этот подкоманда ищет первый обработчик, имя которого соответствует начальному подстроке имя_формата и который имеет возможность записи файла изображения. Если этот параметр не указан, формат угадывается по расширению файла. Если это невозможно определить, эта подкоманда использует первый обработчик, который имеет возможность записи файла изображения.
- -from x1 y1 x2 y2
- Указывает прямоугольную область imageName, которая будет записана в файл изображения. Если указаны только x1 и y1, область простирается от (x1,y1) до правого нижнего угла imageName. Если указаны все четыре координаты, они задают диагонально противоположные углы прямоугольной области. По умолчанию, если этот параметр не указан, используется всё изображение.
- -grayscale
- Если этот параметр указан, данные не будут содержать цветовой информации. Все данные пикселей будут преобразованы в градации серого.
Форматы изображений
Код фотоизображений спроектирован таким образом, чтобы легко добавлять обработчики для дополнительных форматов файлов изображений. Код фотоизображений поддерживает список этих обработчиков. Обработчики добавляются в список путем их регистрации с помощью вызова Tk_CreatePhotoImageFormat. Стандартный дистрибутив Tk поставляется с обработчиками для форматов PPM/PGM, PNG и GIF, которые автоматически регистрируются при инициализации.При чтении файла изображения или обработке строковых данных, указанных с параметром конфигурации -data, код фотоизображений вызывает каждый обработчик по очереди, пока не найдет тот, который утверждает, что может прочитать данные в файле или строке. Обычно это находит правильный обработчик, но если нет, пользователь может указать имя формата с параметром -format, чтобы указать, какой обработчик использовать. Фактически, код фотоизображений будет пытаться использовать обработчики, имена которых начинаются с указанной для параметра -format строки (сравнение не учитывает регистр). Например, если пользователь указывает -format gif, то может быть вызван обработчик с именем GIF87 или GIF89, но не обработчик с именем JPEG (если такие обработчики были зарегистрированы).
При записи данных изображения в файл обработка параметра -format немного отличается: строковое значение, заданное для параметра -format, должно начинаться с полного имени запрошенного обработчика и может содержать дополнительную информацию после этого, которую обработчик может использовать, например, для указания, какой вариант использовать из поддерживаемых форматов. Обратите внимание, что не все обработчики изображений могут поддерживать запись данных прозрачности в файл, даже если целевой формат изображения это поддерживает.
Дополнительные параметры формата
Некоторые форматы изображений поддерживают дополнительные параметры, которые указываются во время загрузки изображения с помощью дополнительных слов в параметре -format. На данный момент поддерживаются следующие:Распределение цветов
Когда фотоизображение отображается в окне, код фотоизображений распределяет цвета для отображения изображения и, при необходимости, размывает изображение, чтобы отобразить разумное приближение к изображению с использованием доступных цветов. Цвета распределяются как цветовой куб, то есть количество распределенных цветов равно произведению количества оттенков красного, зеленого и синего.Обычно количество распределенных цветов выбирается на основе глубины окна. Например, в окне 8-битного PseudoColor код фотоизображений попытается распределить семь оттенков красного, семь оттенков зеленого и четыре оттенка синего, в общей сложности 198 цветов. В окне 1-битного StaticGray (монохромного) окна он будет распределять два цвета, черный и белый. В 24-битном окне DirectColor или TrueColor он будет распределять 256 оттенков каждого из красного, зеленого и синего. К счастью, из-за способа комбинирования значений пикселей в окнах DirectColor и TrueColor для этого требуется распределить только 256 цветов. Если не все цвета могут быть распределены, код фотоизображений уменьшает количество оттенков каждого основного цвета и пытается снова.
Пользователь может контролировать количество цветов, используемых фотоизображением, с помощью параметра конфигурации -palette. Если этот параметр используется, он указывает максимальное количество оттенков каждого основного цвета, которые нужно попытаться распределить. Он также может использоваться для принудительного отображения изображения в оттенках серого, даже на цветном дисплее, путем ввода одного числа вместо трех чисел, разделенных косой чертой.
Благодарности
Тип фотоизображения был разработан и реализован Полом Макеррасом на основе его более раннего фотовиджета и некоторых предложений Джона Оустераута.Пример
Загрузка изображения из файла и его масштабирование до размера окна, что полезно для создания плиссированного фона:# These lines should be called once image create photo untiled -file "theFile.ppm" image create photo tiled # These lines should be called whenever .someWidget changes # size; a <Configure> binding is useful here set width [winfo width .someWidget] set height [winfo height .someWidget] tiled copy untiled -to 0 0 $width $height -shrink
Загрузчик PNG-изображений позволяет применить дополнительный альфа-фактор во время загрузки, что полезно для создания изображений, подходящих для неактивных кнопок:
image create photo icon -file "icon.png"
image create photo iconDisabled -file "icon.png" \
-format "png -alpha 0.5"
button .b -image icon -disabledimage iconDisabled См. также
изображение
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/photo.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/photo.htm