Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос о 32 битном битмапе.


McFalu ©   (2006-09-03 10:10:00) 

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


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


> kami ©

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


McFalu   (2006-09-05 16:34:00) [2]

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


kami   (2006-09-05 09:28:00) [3]

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


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

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-мибитную иконку.


McFalu   (2006-09-04 19:37:00) [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.

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


McFalu   (2006-09-04 18:21:00) [6]


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


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


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


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


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


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

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


kami   (2006-09-03 13:57:00) [9]

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо