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