Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потеря цвета в 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.
Но тем не более, от этого не легче :(


Наверх

Титульная страница Поиск, карта сайта Написать письмо