![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потеря цвета в TImage [D5, WinXP]
kami © (2005-09-04 01:33:00)Получаю иконку папки с помощью SHGetFileInfo. Отображаю сразу - все нормально. Сохраняю в Stream > опять загружаю - цветность теряется.
Как можно этого избежать?
kami (2005-09-05 22:21:00) [1]Джо © (05.09.05 22:05) [8]
Ага, понял и уже нашел "нестандартный TIcon ".
PS. Да здравствует Torry !
Джо (2005-09-05 22:05:00) [2]
> [7] kami © (05.09.05 21:58)
Там жеж еще альфа-канал для обеспечения "полупрозрачности". Кажись, стандартный TIcon вообще не поддерживает.
kami (2005-09-05 21:58:00) [3]Джо © (05.09.05 21:51) [6]
Упс...:)
Не-е, столько мне не нужно,я не такой жадный. Думаю, 16 бит хватит вполне :)
Джо (2005-09-05 21:51:00) [4]
> Какова максимальная у иконок в XP ?
32 бита, afaik.
kami (2005-09-05 21:41:00) [5]Up :)
Ну, можно считать, нашел. Еще раз всем спасибо за помощь, особенно себе :))
В процедуре WriteIcon модуля Graphics обнаружил, что иконки записываются в поток 16-ти цветными!!!
Заменил на 32768 цветов, положил Graphics в папку с программой и остался доволен :)
Теперь вопрос - не переборщил ли я с глубиной цвета ? Какова максимальная у иконок в XP ?
kami (2005-09-04 11:28:00) [6]Antonn © (04.09.05 11:23) [3]
В том то и дело, что не прозрачность, а получается как будто 256-цветная (если не еще меньше)
Antonn (2005-09-04 11:23:00) [7]в каком смысле цвет теряется? прозрачность? тогда маска нужна
kami (2005-09-04 11:17:00) [8]На всякий случай - код (Up в смысле )
procedure TForm1.GetFileIcon(const FFileName:string);
var
FileAttr:DWORD;
uFlags:Cardinal;
SHFileInfo:_SHFileInfoA;
begin
CoInitialize(nil);
FileAttr:=FILE_ATTRIBUTE_NORMAL;
uFlags:=SHGFI_ICON or SHGFI_LARGEICON;
SHGetFileInfo(@FFileName[1],FileAttr,SHFileInfo,SizeOf(SHFileInfo),uFlags);
FFileIcon:=TIcon.Create;
FFileIcon.handle:=CopyImage(SHFileInfo.hIcon,IMAGE_ICON,0,0,LR_COPYDELETEORG);
CoUninitialize;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not OpenDialog1.Execute then
exit;
GetFileIcon(OpenDialog1.FileName);// если отобразить после этого, то иконка нормальная
Stream:=TMemoryStream.Create;
FFileIcon.SaveToStream(Stream);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Stream.Position:=0;
FFileIcon.LoadFromStream(Stream);
Image1.Picture.Icon.Assign(FFileIcon);// а вот здесь уже с потерей цвета :(
Stream.Free;
end;
kami (2005-09-04 01:35:00) [9]упс... прошу прощения, не TImage, а TIcon.
Но тем не более, от этого не легче :(