Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1180438381
s_t_d
2007-05-29 15:33
2007.06.17
TP 7.1. Вывод на экран двумерного массива по строкам


1-1176968507
Oleg_teacher
2007-04-19 11:41
2007.06.17
Как не закрить форму?


2-1180188689
zadrot
2007-05-26 18:11
2007.06.17
Папки и файлы


15-1179762759
Dawid,
2007-05-21 19:52
2007.06.17
Основы программирования


15-1179590480
Piter
2007-05-19 20:01
2007.06.17
Корзина в The Bat





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский