Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.17;
Скачать: CL | DM;

Вниз

TIcon.SaveToFile обрезает иконку до 16 цветов - как лечить??   Найти похожие ветки 

 
Michael_K   (2003-07-03 16:47) [0]

Здравствуйте.
Может знает кто что нужно делать чтобы заработало следующее:

var ic:TIcon;
buf:array[0..10000]of char;
w:word;
begin
ic:=TIcon.Create;
strpcopy(buf, "c:\windows\explorer.exe"); //подставьте здесь свой путь к файлу проводника
ic.handle:=ExtractAssociatedIcon(Application.Handle, buf, w); //извлекаем иконку проводника (полноцветная, винда XP)
im.Picture.Bitmap.Height:=32;
im.Picture.Bitmap.Width:=32;
drawicon(im.Picture.Bitmap.Canvas.Handle, 0,0, ic.Handle); // тест: на Image иконка рисуется полноцветная, всё нормально
ic.SaveToFile("c:\test.ico"); // а вот здесь получаем файл, в котором находится 16-цветная иконка, на которую страшно смотреть :(
end;

Проблема в том, что никак не удаётся сохранить в файл полноцветную иконку, даже неважно каким образом полученную
(не обязательно по ExtractAssociatedIcon). Метод TIcon.SaveToFile обрезает полноцветную иконку до 16-цветной.


 
Набережных С. ©   (2003-07-03 21:02) [1]

Скопируй в папку проекта файл Graphics.pas и в нем сделай следующии исправления:
procedure WriteIcon(Stream: TStream; Icon: HICON; WriteLength: Boolean);
....
CheckBool(GetIconInfo(Icon, IconInfo));
try
InternalGetDIBSizes(IconInfo.hbmMask, MonoInfoSize, MonoBitsSize, 2);
// InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 16);
InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 1000);
MonoInfo := nil;
MonoBits := nil;
ColorInfo := nil;
ColorBits := nil;
try
MonoInfo := AllocMem(MonoInfoSize);
MonoBits := AllocMem(MonoBitsSize);
ColorInfo := AllocMem(ColorInfoSize);
ColorBits := AllocMem(ColorBitsSize);
InternalGetDIB(IconInfo.hbmMask, 0, MonoInfo^, MonoBits^, 2);
// InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 16);
InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 1000);
if WriteLength then
....
end;

Только учти, я этот способ пробовал, но полноценно не тестировал, возможны сюрпризы.



 
Poirot ©   (2003-07-03 21:09) [2]

use WinAPI ExtractIconEx...
two last params - is icon handlers - icons with current system color depth


 
Michael_K   (2003-07-04 00:03) [3]

to: Набережных С.
С П А С И Б О !!!
Просто нет слов :)))



Страницы: 1 вся ветка

Текущий архив: 2003.07.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
1-55641
Andrey V.
2003-07-04 08:42
2003.07.17
Подчеркивание в репорте


1-55499
Versus31
2003-07-04 15:14
2003.07.17
Компиляция из моей программы.


4-55887
DmitryDDR
2003-05-15 07:40
2003.07.17
CreateProcessWithLogonW


1-55503
panov
2003-07-04 15:38
2003.07.17
Object types или class?


8-55667
Rip
2003-03-26 13:24
2003.07.17
Регулятор звуга в проге