Что нового

Можно ли с помощью функции _WinAPI_SaveHICONToFile скопировать иконку из файла

Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Насчёт смазаности иконки из этого проблемного экзешника разобрался.
Я сразу в коде выставил разрешение 48х48 (так как для дальнейших действий мне желательны иконки именно этого разрешения)


Код:
$aIcon[$i] = _WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', 3, 48, 48)



И иконка стала копироватся отлично.
А вот этот код:


Код:
$aIcon[$i] = _WinAPI_Create32BitHICON(_WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', 3, 48, 48), 1)



Я так понимаю и нужен для того чтобы если иконка окажется не 32 битная этот код сделает её 32 битной (или я что то не так понял)
А так пришёл к выводу что для моих целей (копировать иконки из разных ресурсов)этот код самый оптимальный.
Интересно а на 64 машине этот код который перегоняет в 32 бита (если я правильно понял) будет работать?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Браво! Ты сам разобрался. Вот только пойми одну вещь, иконка, это не отдельный рисунок фиксированного размера, а совокупность изображений разного размера. Обычно используются 16, 32 и 48, реже добавляют 24 (в основном для меню "Start"). В Windows Vista также активно используют иконки 256x256 c PNG компрессией или без оной (для совместимости). Например, если у тебя содержимое папок отображается как "Details", то используются иконки маленького размера, по умолчанию 16x16. В случае "List" - 32x32. Если в файле иконок отсутствует изображение необходимого размера, то будет взята ближайшая по размеру иконка и увеличена/уменьшена до требуемого размера. Отсюда и потеря качества изображения. Поэтому я не рекомендую тебе использовать только иконки с размером 48x48, а сохранить как минимум иконки трех основных размеров: 16x16, 32x32 и 48x48. Что, собственно я и cделал.

Разрядност системы и "битность" иконки, это совершенно разные вещи. Если я говорю о 32-битной иконке, то подразумеваю изображение 24 бит (RGB, 8 бит на канал, т.е. 256 оттенков для каждого цвета) + Alpha канал (8 бит), aka прозрачность. Часто, такие иконки называют еще XP-шными. Разрядность системы к этому не имеет никакого отношения. Данный код должен работать как на x86, так и на x64 системах (не проверял за отсутствием последней).

Так понятно?
 
Автор
A

assch

Новичок
Сообщения
166
Репутация
4
Почему сохранить как минимум иконки трех основных размеров теперь понял
Насчёт разрядности системы тоже кое что понял
Большое спасибо Yashied за пояснения
 
Верх