Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
8-55661
R2D2
2003-03-22 22:42
2003.07.17
Проигрывание MP3 файлов. Какая библиотека нужна?


14-55799
Mifs
2003-06-30 18:14
2003.07.17
Адресация жесткого диска. (CHS)


14-55757
Фикус
2003-07-03 09:10
2003.07.17
Список файлов на сайте


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


1-55622
simeon
2003-07-03 19:26
2003.07.17
Немодальные формы, caFree и if Assign(MyForm) ...????





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский