# photo

Встроенный тип полноцветных изображений Tk.

## СИНТАКСИС

          image create photo ?имя? ?параметры?

## ОПИСАНИЕ

Пиксели изображения типа photo могут быть любого цвета, а также могут быть прозрачными. При сохранении изображений этого типа каждый пиксель кодируется 24 битами; при выводе пиксела при необходимости используется приближение (dithering). Закодированные данные могут быть представлены в виде файла или строки, а также в виде C кода через процедурный интерфейс. В настоящее время поддерживаются только форматы GIF и PPM/PGM; однако в системе имеется интерфейс, облегчающий добавление новых форматов изображений. Области, данные для которых не представлены, при выводе изображения оказываются прозрачными.

## СОЗДАНИЕ ИЗОБРАЖЕНИЙ ТИПА photo

Как и все остальные изображения, изображения типа photo создаются командой image create. Команда поддерживает следующие параметры:

-channel идКанала
  Параметр задает имя канала, открытого для чтения, по которому должно поступить изображение типа photo. Формат данных в канале должен быть таким, для которого существует соответствующая программа чтения данных из файла или канала.
-data строка
  Задает содержимое изображения в виде строки. Формат данных в строке должен быть таким, для которого существует соответствующая программа чтения данных из строки. Если заданы оба параметра -data и -file, то параметр -file подавляет значение параметра -data.
-format имя-формата
  Задает имя файла, содержащего описание формата данных, указанных параметрами -data или -file.
-file имя
  Задает имя файла, содержащего данные для изображения типа photo. Формат файла должен быть таким, для которого существует соответствующая программа чтения данных из файла или канала.
-gamma значение
  Указывает на то, что распределение цветов для вывода данного изображения в окне должно быть исправлено для нелинейного дисплея с помощью показателя экспоненты gamma. (В большинстве CRT интенсивность вывода является показательной функцией введенного значения, что обеспечивает качественное приближение; gamma это показатель экспоненты, его значение обычно близко к "2"). Указанное значение должно быть положительным. По умолчанию параметр имеет значение "1" (коррекция не производится). Значения, большие единицы, осветляют изображение, меньшие единицы делают его темнее.
-height число
  Задает высоту изображения в пикселах. Этот параметр оказывается полезным, в первую очередь, в ситуациях, когда пользователь строит изображение по частям. Значение ноль (принятое по умолчанию) обеспечивает возможность вертикального растяжения или сжатия изображения в соответствии с его содержимым.
-palette спец-палитры
  Задает разрешение цветов выделенного изображению и число используемых цветов из палитр окон размещения изображения. Строка параметра спец-палитры может представлять собой либо одно десятичное число, задающее число используемых оттенков серого цвета, либо три десятичных числа, разделенных наклонными косыми чертами (/), задающих число используемых оттенков красного, зеленого и голубого цветов. Если строка состоит из одного десятичного числа, то будет выводиться монохромное изображение (оттенками серого цвета).
-width число
  Задает ширину изображения в пикселах. Этот параметр оказывается полезным, в первую очередь, в ситуациях, когда пользователь строит изображение по частям. Значение ноль (принятое по умолчанию) обеспечивает возможность горизонтального растяжения или сжатия изображения в соответствии с его содержимым.

## КОМАНДА IMAGE

При создании изображения типа photo Tk создает также новую команду, имя которой совпадает с именем вновь созданного изображения. С помощью этой команды можно выполнять различные операции над изображением. Она имеет следующий общий вид:

          imageName параметр ?арг арг ...?

Параметр и аргументы уточняют поведение команды.

Параметры, приводящие к дописыванию данных в изображение, обычно приводят к увеличению размеров изображения, за исключением случаев, когда пользователь задал ненулевые значения параметров конфигурации -width и/или -height; в последнем случае ширина и/или высота изображения не изменяются.

Изображения типа photo поддерживают следующие команды:

имяИзображения blank
  Очищает изображение, т.е. устанавливает, что в изображении нет данных, поэтому при выводе оно оказывается прозрачным, и на его месте видно содержимое содержащего его окна.
имяИзображения cget параметр
  Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды image create photo.
имяИзображения configure ?параметр? ?значение параметр значение ...?
  Запрашивает значения параметров конфигурации изображения или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение - нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды image create photo.
имяИзображения copy исхИзобр ?параметр значение(я) ...?

  Копирует область изображения с именем исхИзобр (которое должно быть изображением типа photo) в изображение с именем имяИзображения, возможно с растяжением пикселей и/или subsampling. Если параметры не заданы, то команда копирует в имяИзображения все исходное изображение, начиная с точки с координатами (0,0) в изображении имяИзображения. В команде могут быть заданы следующие параметры:

  -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), к которым прибавлены размеры исходной области (после subsampling??? и увеличения, если они требуются). Если координаты x2 и y2 заданы, то копируемая область будет при необходимости воспроизведена несколько раз для замещения всего отведенного прямоугольника.
  -shrink
    Указывает на то, что размер отведенной области должен быть при необходимости уменьшен таким образом, чтобы копируемый прямоугольник оказался в ее правом нижнем углу. Если пользователь задал ненулевые значения параметров конфигурации -width или -height , то параметр -shrink не окажет влияния на ширину или высоту соответственно.
  -zoom x y
    Задает необходимость растяжения копируемой области с коэффициентом x в X-направлении и с коэффициентом y в Y-направлении. При задании этого параметра каждый пиксел исходного изображения при копировании будет представлен в виде прямоугольника x * y пикселей одного цвета. Оба числа x и y должны быть положительными.
  -subsample x y
    Указывает на необходимость уменьшения исходного изображения за счет использования только каждого x-го пикселя в X-направлении и каждого y-го пикселя в Y-направлении. Отрицательные значения параметров приводят к отражению в соответствующем направлении. Если параметр y не задан, то его значение по умолчанию совпадает со значением параметра x.
имяИзображения get x y
  Возвращает цвет пиксела с координатами (x,y) в указанном изображении в виде списка из трех целых чисел в промежутке от 0 до 255, описывающих соответственно его красную, зеленую и голубую составляющие.
имяИзображения put данные ?-to x1 y1 x2 y2?
  Устанавливает цвета пикселей, заданные параметром данные. Этот параметр используется для формирования двумерного массива пикселей, который затем копируется в изображение имяИзображения. Данные представляют собой список строк, идущих сверху вниз, каждая из которых является списком цветов, идущих слева направо. Каждый цвет задается именем (например, blue) или в шестнадцатеричном виде (например, #2376af). С помощью параметра -to можно отвести область для размещения массива. Если заданы только координаты x1 и y1, то верхним левым углом отведенной области является точка с координатами (x1,y1), а размеры области совпадают с размерами массива. Если указаны все четыре координаты, то они задают противоположные углы отведенного прямоугольника, и содержимое массива будет при необходимости повторено в X- и Y-направлениях для замещения всего отведенного прямоугольника.
имяИзображения read имяфайла ?параметр значение(я) ...?

  Читает данные из файла с именем имяфайла в изображение с именем имяИзображения. Выполнение команды начинается с просмотра списка программ обработки форматов файлов изображений в поисках программы, способной интерпретировать данные в указанном файле; затем эти данные читаются из файла в изображение с именем имяИзображения. Команда может иметь следующие параметры:

  -format имя-формата
    Задает формат данных в файле с именем имяфайла. Точнее говоря, при поиске в списке программ обработки будут просматриваться только те программы, имена которых начинаются с имени-формата.
  -from x1 y1 x2 y2
    Задает прямоугольную подобласть в изображении, описываемом данными файла, которую необходимо скопировать в изображение с именем имяИзображения. Если заданы только параметры x1 и y1, то они задают координаты левого верхнего угла подобласти, а ее правый нижний угол совпадает с правым нижним углом всего изображения в файле. Если заданы все четыре координаты, то они задают два противоположных угла подобласти. Если этот параметр не задан, то по умолчанию копируется все изображение.
  -shrink
    Если присутствует этот параметр, то размер изображения с именем имяИзображения при необходимости уменьшается таким образом, чтобы прямоугольник, отведенный под содержимое файла изображения, находился в правом нижнем углу изображения с именем имяИзображения. Если пользователь задал ненулевые значения параметров конфигурации -width или -height, то параметр -shrink не будет оказывать влияния соответственно на ширину или высоту изображения.
  -to x y
    Задает координаты верхнего левого угла прямоугольника в изображении с именем имяИзображения, отводимого под данные из файла. По умолчанию параметр имеет значение (0,0).
имяИзображения redither
  При выводе изображений типа photo используется алгоритм приближения (dithering) , который распространяет дискретные ошибки с пиксела на его соседей. Если данные для изображения имяИзображения поставляются частями, то результат приближения может быть не вполне корректным. Обычно эта некорректность на взгляд незаметна, однако при серьезных нарушениях с помощью данной команды можно пересчитать необходимые приближения в каждом окне, в котором выводится данное изображение.
имяИзображения write имяфайла ?параметр значение(я) ...?

  Записывает изображение имяИзображения в файл с именем имяфайла. Может иметь следующие параметры:

  -format имя-формата
    Задает имя программы обработки файла изображения, которую следует использовать при записи данных в файл. Точнее говоря, данная подкоманда ищет первую программу обработки в списке, начало имени которой совпадает с началом имени-формата и которая способна записывать данные в файл. Если этот параметр не задан, то эта подкоманда использует первую программу обработки, способную записывать данные в файл изображения.
  -from x1 y1 x2 y2
    Задает прямоугольную область в изображении с именем имяИзображения, которую следует переписать в файл изображения. Если заданы только значения x1 и y1, то они задают верхний левый угол прямоугольника, а его нижний правый угол совпадает с нижним правым углом изображения. Если заданы все четыре координаты, то они задают противоположные углы прямоугольника. Если параметр не задан, то по умолчанию копируется все изображение.

## ФОРМАТЫ ИЗОБРАЖЕНИЙ

При создании программ обработки изображений типа photo предусмотрена возможность легкого добавления новых форматов файлов изображений. Все программы занесены в список. Добавление программы в список происходит в результате выполнения команды Tk_CreatePhotoImageFormat. В стандартном дистрибутиве Tk содержатся программы обработки для форматов PPM/PGM и GIF, которые автоматически заносятся в список при инициализации.

При чтении файла изображения или обработке строки данных, заданной в параметре конфигурации -data, команда photo image просматривает программы обработки одну за другой, пока не найдется такая, которая утверждает, что она способна читать данные из файла или строки. Результатом поиска обычно бывает правильная программа обработки. В противном случае пользователь может задать имя программы обработки с помощью параметра -format.

На самом деле команда photo image просматривает только те программы обработки, имена которых начинаются со строки, заданной параметром -format (при сравнении регистр не учитывается). Если, например, пользователь указал -format gif, то могут выполняться программы обработки GIF87 или GIF89, но не программа JPEG (если такие программы были внесены в список).

При записи изображения в файл параметр -format обрабатывается несколько другим способом: строка, являющаяся его значением, должна начинаться с полного имени запрашиваемой программы обработки, за которым может следовать дополнительная информация. Эта дополнительная информация может, например, сообщать программе, какую из версий формата следует использовать.

## РАСПРЕДЕЛЕНИЕ ЦВЕТОВ

При выводе изображения типа photo в окно команда photo image отводит цвета и, при необходимости, возмущает изображение, заменяя отсутствующие цвета доступными. Выделяемые цвета образуют куб: число возможных составных цветов представляет собой произведение чисел оттенков красного, зеленого и голубого цветов.

Обычно выбор числа цветов определяется глубиной окна. Например, в 8-битовом окне PseudoColor команда photo image пытается отвести семь оттенков красного, семь оттенков зеленого и четыре оттенка голубого, всего 198 составных цветов. Для 1-битового окна StaticGray (монохромного) команда отводит два цвета, белый и черный. Для 24-битовых окон DirectColor или TrueColor команда отводит по 256 оттенков каждого из трех цветов. Если не удается отвести все цвета, то команда photo image уменьшает число оттенков каждого простого цвета и производит новую попытку размещения.

Пользователь может частично управлять выбором числа цветов с помощью параметра конфигурации -palette. При использовании этого параметра в нем задается максимальное число используемых оттенков каждого из простых цветов. Кроме того с помощью этого параметра можно потребовать представления изображения оттенками серого цвета даже в цветном окне, задав одно число вместо трех, разделенных наклонными чертами.