![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Альфа канал иконки [D7, XP]
NS © (2012-12-28 03:32:00)Здравствуйте. Вопрос прислал Иванов из Калганова.
При получении ICONINFO иконок файлов я заметил, что некоторые hbmColorуже имеют альфа канал, в то время как другие полностью прозрачны и "требуют обработки" hbmMask'ом.
Как отличить эти битмапы?
NS (2012-12-28 11:50:00) [1]
var
icon: HICON;
FI: SHFILEINFO;
II: ICONINFO;
BI: tagBITMAPINFO;
DC: HDC;
ImageList: HIMAGELIST;
begin
SHGetFileInfo(PChar(fname), 0, FI, SizeOf(FI), SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_LARGEICON);
ImageList:= GetImageListSH(SHIL_EXTRALARGE);
icon:= ImageList_GetIcon(ImageList, FI.iIcon, ILD_NORMAL);
GetIconInfo(icon, II);
DC:= CreateCompatibleDC(0);
InitBIHeader(II.hbmColor, BI.bmiHeader);
Bits:= Pointer(GlobalAlloc(GMEM_FIXED, BI.bmiHeader.biSizeImage));
GetDIBits(DC, II.hbmColor, 0, BI.bmiHeader.biHeight, Bits, BI, DIB_RGB_COLORS);
DeleteDC(DC);
DeleteObject(II.hbmMask);
DeleteObject(II.hbmColor);
end;
В одном случае Bits уже будет содержать информацию об альфа канале, в другом он будет полностью нулевой.
KilkennyCat (2012-12-28 07:13:00) [2]
> Как отличить эти битмапы?
а как
> При получении ICONINFO иконок файлов я заметил
?