Элемент управления кнопки и базовая замена для TBitmap, которая правильно обрабатывает прозрачность PNG без написания кода предварительного смешивания - PullRequest
15 голосов
/ 23 августа 2011

Delphi 2010 TSpeedButtons, похоже, действительно не поддерживает прозрачность PNG должным образом, потому что свойство Glyph использует TBitmap для внутреннего использования, а TBitmap для растровых изображений и не поддерживает прозрачность PNG должным образом, а TSpeedButton.Glyph не может поддерживать прозрачность.. обновление: Но на самом деле проблема заключалась в том, что у меня были некоторые внешние вещи (компоненты Developer Express), которые делали поддержку Delphi PNG неработоспособной, с другой стороны, TImage, хотя он все еще TPicture и может поддерживать PNG, былтакже подвержена этой экспресс-ошибке разработчика.

Был уже задан вопрос о здесь , и ответ показывает, как использовать предварительное смешивание, чтобы прозрачность не превратилась в черныйпиксели.Я хочу знать, есть ли другой элемент управления кнопки, который будет использовать альфа-смешанные PNG, загруженные во время разработки, и который не преобразует ресурсы PNG в формат BMP, отбрасывая альфа-канал и вызывая черную границу, показанную здесь.

Короче говоря, этот элемент управления не будет использовать TBitmap и не будет использовать функцию прозрачности цветового ключа, которой обладает все TBitmap.

Повторюсь, я не спрашиваю, как решить проблему черного цвета вокруг.проблема при использовании устаревшей функциональности VCL на основе TBitmap / TSpeedButton, поскольку в ней отсутствуют современные функции прозрачности PNG, я прошу заменить ее на что-то еще, что «просто работает».

В качестве вторичного недостаткаПреобразование небольшого файла .png в ресурс растрового изображения .DFM, по сути, приводит к бесполезному расходованию пространства и делает мой формат .DFM слишком большим.Собственное хранилище формата файлов .png в формате .dfm должно уменьшить размер получаемых форм.

enter image description here

Обновление: Компоненты Png выглядят так, как будто они должны работать, но я получилошибка Invalid Graphic format, когда я пытаюсь загрузить png в кнопку Png speed.Обратите внимание, что компонент списка изображений Png не имеет таких проблем.Похоже, что cxLibrary (пакет разработчика Express) ломает вещи.После того, как я удалил все материалы для разработчиков, эта проблема исчезла.Поэтому, хотя я выбрал Pngcomponents в качестве ответа, если у вас установлен devex, используйте вместо этого их кнопки, а не pngcomponents.

enter image description here

Ответы [ 3 ]

11 голосов
/ 23 августа 2011

Вы можете взглянуть на PngComponents .Он имеет кнопку TPngSpeed ​​и некоторые другие элементы управления, работающие напрямую с PngImages.

2 голосов
/ 23 августа 2011

Оказывается, что cxButton, входящий в пакет VCL Developer Express, также поддерживает кнопки PNG.

2 голосов
/ 23 августа 2011

Вы также можете заглянуть в программный компонент TMS под названием TAdvGlowButton, поскольку он поддерживает изображения PNG с альфа-прозрачностью.

Ссылка на сайт ...

...