Советы по Delphi

         

Загрузка иконок для TBitBtn и преобразование их к `no white` (без белого).


Если вы загружаете иконку в TImage, то этот компонент "понимает" как сделать ее прозрачной на основании полученной от нее информации. Реально иконки содержат два растровых изображения, одна из которых содержит информацию с нормальными цветами, в том числе с белым, который в дальнейшем должен стать прозрачной областью, второе же изображение представляет собой маску, состоящую из двух цветов, один из которых также белый, он необходим для создания прозрачной области, и черным цветом для цветных областей. Когда с двумя изображениями осуществляется операция "xor" вместе с фоном, белый цвет в белых областях для создания прозрачного фона (сквозь который проглядывает фон), цвет (включая белый) в черных областях для отображения иконки; (вы можете получить также области с "инвертированным фоном", они возникают в месте, где расположен черный цвет на первом изображении, но в этом же месте в изображении-маске находится белый цвет).

Когда вы преобразовываете иконку в растровое изображение, информация о прозрачности теряется, поскольку растровые изображения не имеют возможности хранения этого самого изображения-маски, которое используется для создания прозрачной области. Я догадываюсь что иконки, которые вы используете, являются "отдельностоящими" объектами с прозрачным фоном, обознащающим, что само изображение окружено белым фоном. Так, когда вы загружаете иконку в свойство Glyph компонента TBitbutton или TSpeedbutton, цвет пиксела левого нижнего угла (который в нашем случае будет белым) теперь будет интерпретироваться как цвет, задающий прозрачную область, и создающий именно тот эффект, который вы описали.

Решением будет преобразование иконки в растровое изображение, и сохранение ее как .BMP-файла, затем редактирование ее в ImageEdit, Resource Workshop, или даже PaintBrush, для задание цвета левого нижнего пиксела как цвета, задающего прозрачность. Правда, у меня есть код, который может извлечь из иконки цвет и изображение, задающее маску, но это тема уже следующей статьи. В ней мы рассмотрим способ обратного восстановления иконки по изображению и его маске. [001937]



Содержание раздела