Форум: "Основная";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c