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

Вниз

Вопрос о 32 битном битмапе.   Найти похожие ветки 

 
McFalu ©   (2006-09-03 10:10) [0]

Если у меня в обекте ICON класса TICON  есть изображение( 32 битное) как мне его сохранить, если обекты класса TICON сохраняються в 16 бит.
Может можно как-то?


 
kami ©   (2006-09-03 13:57) [1]

McFalu ©   (03.09.06 10:10)
обекты класса TICON сохраняються в 16 бит.


Поправка :
"обекты" класса TIcon сохраняются с 16 цветами :)

Я поступил криво :
скопировал Graphics.pas в папку со своим проектом и заменил в procedure WriteIcon строки
InternalGetDIB[Sizes](...., [нужное количество цветов вместо 16]).


 
Vovan#1   (2006-09-03 17:52) [2]

В Delphi TIcon весьма ограничен. У него проблемы ещё и с записью .ico файлов, содержащих не одну иконку. Можно либо самому писать чтение/запись иконок, либо использовать компоненты или библиотеки сторонних авторов (например, KIcon). Я как-то раз писал что-то подобное, загрузку и запись сделал, далее оформлять не стал. Если надо - могу дать эти исходники.


 
McFalu ©   (2006-09-04 18:00) [3]


> В Delphi TIcon весьма ограничен. У него проблемы ещё и с
> записью .ico файлов, содержащих не одну иконку. Можно либо
> самому писать чтение/запись иконок, либо использовать компоненты
> или библиотеки сторонних авторов (например, KIcon). Я как-
> то раз писал что-то подобное, загрузку и запись сделал,
> далее оформлять не стал. Если надо - могу дать эти исходники.
>


А что за компонент KIcon


 
McFalu ©   (2006-09-04 18:21) [4]


> Я поступил криво :
> скопировал Graphics.pas в папку со своим проектом и заменил
> в procedure WriteIcon строки
> InternalGetDIB[Sizes](...., [нужное количество цветов вместо
> 16]).


Я так поступил. Заменил 16 на 32. Ничего не вышло. Все равно Сохраняет в 16.
Даже заменил в Sourse\vcl файл на отредактированый. Все равно не выходит


 
McFalu ©   (2006-09-04 19:37) [5]

есть 4 поля:
InternalGetDIBSizes(IconInfo.hbmMask, MonoInfoSize, MonoBitsSize, 2);
InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 16);

InternalGetDIB(IconInfo.hbmMask, 0, MonoInfo^, MonoBits^, 2);
InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 16);
Если меняю последние, тогда компилятор выдает ошибку.
Можно поменть только вторую строку на 32.

Может я что-то делаю не так?


 
Vovan#1   (2006-09-04 21:24) [6]

KIcon тут:
http://www.torry.net/pages.php?id=105

Там он требует JEDI Code Library (JCL). Можно тогда сразу использовать JVCL - в них, говорят, есть что-то подходящее.

Просто поменять значения аргументов не получится. Загляни, хотя бы, в:

procedure InitializeBitmapInfoHeader(Bitmap: HBITMAP; var BI: BitmapInfoHeader;
 Colors: Integer);

(куда этот Colors подставляется)


 case Colors of
   2: BI.biBitCount := 1;
   3..16:
     begin
       BI.biBitCount := 4;
       BI.biClrUsed := Colors;
     end;
   17..256:
     begin
       BI.biBitCount := 8;
       BI.biClrUsed := Colors;
     end;


Значит, если бы всё и получилось, при 32 ты получил бы 8-мибитную иконку.


 
kami ©   (2006-09-05 09:28) [7]

Вместо 16 и там и там поставь 16384 - удивишься :)
Ведь имеется ввиду количество цветов, а не количество бит, выделяемых под них. 32(6 бит) цвета от 16(4 бита) отличаются не очень сильно.


 
McFalu ©   (2006-09-05 16:34) [8]

Все работает. ОГРОМНОЕ СПАСИБО to kami.
Только понять не могу, почему разработчики Delphi сразу не могли это прортсать, что очень сложно.


 
Neud   (2006-10-03 09:53) [9]


> kami ©

Иконки сохраняются не корректно.



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
2-1180388487
snowkam
2007-05-29 01:41
2007.06.17
время и дата


4-1168172596
algol
2007-01-07 15:23
2007.06.17
Запустить процесс, помогите кто чем может


15-1177671511
GTR86
2007-04-27 14:58
2007.06.17
Защита программы от копирования


10-1134032327
_Lucifer_
2005-12-08 11:58
2007.06.17
Создание Add-ins для Word


15-1179789729
Glivera
2007-05-22 03:22
2007.06.17
Помогите с Win2000