Главная страница
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.012 c
14-55716
DBDev
2003-07-02 09:52
2003.07.17
Люди HELP плиз!!! Проблема с вычислением ТОТАЛ-а...


14-55853
Alex-kosmonavt
2003-07-01 18:57
2003.07.17
Компонент для работы с LPT


1-55636
pet
2003-07-03 21:00
2003.07.17
Быстрый поиск


14-55729
HermitAlex
2003-07-02 16:11
2003.07.17
Парсинг SQL выражения


14-55713
Дмитрий К.К.
2003-07-02 06:10
2003.07.17
Именинники 2 июля