Картинка.ГлубинаЦвета

Методы · ColorDepth

Возвращает глубину цвета картинки - количество бит для хранения цвета каждой точки изображения.

Синтаксис

ГлубинаЦвета()
Полное описание, параметры и ограничения

Картинка.ГлубинаЦвета (Picture.ColorDepth)

Картинка (Picture)

ГлубинаЦвета (ColorDepth)

Доступен, начиная с версии 8.3.14.

Синтаксис:
ГлубинаЦвета()
Возвращаемое значение:
Тип: ГлубинаЦвета, Неопределено.
Если картинка создана с вариантами, то возвращает информацию по текущему варианту.
Для картинок векторных форматов возвращает Неопределено.
На мобильной платформе и мобильных клиентах всегда возвращает Неопределено.
Описание:

Возвращает глубину цвета картинки - количество бит для хранения цвета каждой точки изображения.

Доступность:

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.3.14.

Описание изменено в версии 8.3.19.

Методическая информация

Практические примеры

Сравнить 24-битный исходник, 8-битную копию и оттенки серого

Обработка глубины цвета и преобразование в серый выполняются на отдельных обработчиках одного собственного PNG.

Где и как запускать

Полный серверный общий модуль своей учебной конфигурации. Картинки только в памяти.

Подготовка

  1. В отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса создайте серверный общий модуль УчебныеКартинки с флагом Сервер. Вставьте весь код одного урока и вызовите УчебныеКартинки.ВыполнитьПример() из серверной команды своей обработки.

  2. Встроенный собственный PNG имеет 80×40 пикселей: белое поле, синий прямоугольник 40×20 с красной рамкой, начинающийся в точке 20,10. Фотографии, подписи, печати и документы пользователей не используются.

  3. Картинки создаются из Base64 в памяти. Методы изменения меняют ОбрабатываемаяКартинка, а не исходный Картинка. ПолучитьКартинку создаёт отдельный результат; результаты не записываются на диск или в базу.

  4. Основные уроки выполняйте на настольном сервере 1С 8.5.1.1343, не на мобильной платформе. Там другие ограничения форматов, метаданных цвета и плотности.

  5. Последний урок — отдельный клиентский обработчик команды своей управляемой формы: он нужен для ФильтрИменФайлов и чтения устаревшего API, не для серверной обработки.

Процедура ВыполнитьПример() Экспорт
    Исходная = Новый Картинка(Base64Значение("iVBORw0KGgoAAAANSUhEUgAAAFAAAAAoCAIAAADmAupWAAAAX0lEQVR4nO3YURGAMAxEwYhAROUgu66KCIZmuO6bE5D9Ta3DqnVYwOkBpwecHnB6r8BzjJZ1gq97bh4wMDAwMDAwMDAwMDAwMDDw1+CzXjx/DDg94PSA0wNOr7oP2N0DKcWmInx+weoAAAAASUVORK5CYII="));
    Если Исходная.Ширина() <> 80 ИЛИ Исходная.Высота() <> 40 Тогда
        ВызватьИсключение "Собственный PNG должен быть 80 на 40 пикселей";
    КонецЕсли;
    Сообщить(Исходная.ГлубинаЦвета() = ГлубинаЦвета.БитНаПиксел24);
    Сообщить(Исходная.ОттенкиСерого() = Ложь);
    Палитра = Новый ОбрабатываемаяКартинка(Исходная);
    Палитра.УстановитьФормат(ФорматКартинки.PNG);
    Палитра.УстановитьГлубинуЦвета(ГлубинаЦвета.БитНаПиксел8);
    Палитровая = Палитра.ПолучитьКартинку();
    Сообщить(Палитровая.ГлубинаЦвета() = ГлубинаЦвета.БитНаПиксел8);
    СераяОбработка = Новый ОбрабатываемаяКартинка(Исходная);
    СераяОбработка.УстановитьФормат(ФорматКартинки.PNG);
    СераяОбработка.ПреобразоватьВОттенкиСерого();
    Серая = СераяОбработка.ПолучитьКартинку();
    Сообщить(Серая.ОттенкиСерого() = Истина);
    Сообщить(Серая.Ширина() = 80 И Серая.Высота() = 40);
    Сообщить(Исходная.ОттенкиСерого() = Ложь);
    Сообщить("Фактическая глубина серой копии: " + Строка(Серая.ГлубинаЦвета()));
КонецПроцедуры

Разбор по шагам

  1. Собственный PNG закодирован как RGB: исходная глубина 24 бита, не grayscale.

  2. Первому обработчику явно задать PNG и 8 бит: PNG поддерживает палитровое хранение.

  3. Второму независимому обработчику задать PNG и преобразовать все цвета в серые.

  4. Проверить признак ОттенкиСерого и сохранность размеров. Глубина серого результата выводится фактически, не угадывается по исходному типу.

  5. Сравнить исходный признак: в исходной картинке остались цветные пиксели.

Как проверить результат

  1. Шесть булевых сообщений Истина; затем фактическая глубина серой копии.

  2. На мобильной платформе признак ОттенкиСерого может быть Неопределено; этот опыт предназначен настольному серверу.

Ожидаемый результат

Два независимых результата объясняют палитру и серый цвет без изменения исходного рисунка.

На что обратить внимание

  1. Формат должен поддерживать глубину: JPEG не поддерживает палитру 8 бит, GIF поддерживает только её.

  2. Серый вид на экране и признак grayscale в файле — разные вещи; используйте поддерживающий метаданные PNG.

  3. Не утверждайте, что любое уменьшение глубины обязательно уменьшит размер всех файлов.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.