gifts2017

Внешняя компонента для извлечения иконок из ресурсов

Опубликовал Евгений (le_) в раздел Программирование - Внешние компоненты

Компонента предназначена для извлечения иконок из ресурсов EXE, DLL, CPL, MUI-файлов.
Метод компоненты "ИзвлечьИконку" возвращает двоичные данные, которые можно записать в файл, получив файл ICO или PNG, либо разместить на форме без создания промежуточных файлов.

Компонента разработана по технологии Native.

Работает только в Windows с 1С v. 8.2 (обычное приложение, толстый и тонкий клиент управляемого приложения).

Пример использования (конфигурация) прилагается (обычное и управляемое приложение).


Методы компоненты:

ИзвлечьИконку(ПутьКФайлуСРесурсом, ИмяРесурсаВФайле, Ширина, Высота, КоличествоБитВЦвете, КонвертироватьВPNG)

Описание:

Извлекает ресурс-иконку из указанного файла.
   
Параметры:
ПутьКФайлуСРесурсом (обязательный)
Тип: строка
Путь к файлу с ресурсом

ИмяРесурсаВФайле (обязательный)
Тип: число или строка
Имя или индекс ресурса в файле

Ширина (обязательный)
Тип: число
Ширина иконки в пикселях

Высота (обязательный)
Тип: число
Высота иконки в пикселях

КоличествоБитВЦвете (обязательный)
тип: число
Количество бит в цвете

КонвертироватьВPNG (необязательный)
Тип: булево
Если Истина, извлеченная иконка будет сконвертирована в PNG
Значение по-умолчанию: Ложь

Возвращаемое значение:
Тип: ДвоичныеДанные, Неопределено.
ДвоичныеДанные - данные извлеченной иконки. Если иконку извлечь не удалось, возвращается Неопределено.

 

НЕМНОГО О РЕСУРСАХ И ИКОНКАХ

(рекомендую ознакомиться всем, кто будет использовать компоненту)

Для просмотра и редактирования ресурсов в файлах можно использовать редактор ресурсов, наподобие бесплатного Resource Hacker.

Обычно, в одном ресурсе-иконке содержится несколько изображений разного размера и с разным количеством использованных цветов (битность).

На рисунке ниже показано содержимое ресурса-иконки с индексом 104 из файла user32.dll ОС Windows XP.

Иконка 104 из user32.dll

Как видно, ресурс содержит в себе 9 изображений с различными параметрами.

По-умолчанию, операционная система (Windows) сама выбирает, какое изображение, из содержащихся в ресурсе, будет отображено на экране.

С помощью параметров метода компоненты можно извлечь иконку с нужными нам размерами и битностью.

 

Далее. Большая часть иконок ОС Windows (и приложений) не содержит в себе изображений с alpha-каналом.

Если после извлечения такой иконки из ресурса вы откроете ее в каком-нибудь редакторе (например, MS Paint) или отобразите с помощью проводника Windows, вы увидите примерно следующее:

Иконка с неправильно наложенной маской

Темный ободок вокруг иконки смотрится не очень красиво.

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

Иконка с правильным наложением маски

Дело в том, что каждая такая иконка состоит из двух частей: XOR-маски и AND-маски.

AND Mask & XOR Mask

Эффект полупрозрачности достигается путем сложения этих масок с помощью функций передачи битовых блоков данных с определенными параметрами. Windows-API функция DrawIcon аботает именно так.

Т.е., если вы извлечете иконку с масками и отобразите её с помощью функции DrawIcon (DrawIconEx), она отобразится правильно.

В 1С, по понятным причинам, нет возможности вызвать функцию DrawIcon и отобразить иконку корректно, поэтому в метод компоненты добавлен последний (необязательный) параметр "КонвертироватьВPNG".

Если вызвать метод компоненты со значением этого параметра установленным в Истина, то иконка с маской будет сконвертирована в изображение формата PNG с alpha-каналом. 1С такое изображение распознает и отобразит правильно.

Конвертировать в формат PNG имеет смысл только 32-битные изображения.

Иногда cреди изображений в ресурсах-иконках могут находиться изображения с alpha-каналом. Такие иконки так же нет смысла конвертировать в PNG. Примером такого изображения является 32-битная иконка 256х256 в файле 1cestart.exe.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Внешняя компонента для извлечения иконок из ресурсов
.rar 30,85Kb
03.04.13
15
.rar 30,85Kb 15 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Евгений Стоянов (quick) 08.04.13 09:22
Конечно забавно, но с трудом представляю применимость. В какой задаче вы используете эту компоненту?
2. Евгений (le_) 08.04.13 10:27
(1) quick, время от времени приходится делать экспорт в другие приложения или импорт из них. Вешаю на кнопочки иконки из этих приложений. Было свободное время, решил написать что-то этакое...
3. Константин Куликов (Светлый ум) 30.08.13 08:03
Удобно, наверняка сгодится.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа