Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.09.2008, 10:46
vinni vinni вне форума
Начинающий
 
Регистрация: 26.01.2006
Сообщения: 135
Репутация: 10
По умолчанию BMP в ICO

Доброго времени суток. Подскажите плз кто знает, как из TBitmap записать рисунок в *.ico-файл?
Ответить с цитированием
  #2  
Старый 24.09.2008, 11:19
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Создай TIcon и перересуй на него твой TBitmap, в сети примеров - выше крыши.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 24.09.2008, 12:04
vinni vinni вне форума
Начинающий
 
Регистрация: 26.01.2006
Сообщения: 135
Репутация: 10
По умолчанию

Дело в том, что TIcon поддерживает только 16 цветов. Т.е. цветность обрезается. А мне нужно делать 32 и 24 битные иконки (в зависимости от наличия альфа-канала).
Ответить с цитированием
  #4  
Старый 24.09.2008, 12:36
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,026
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Есть API функция CreateIconIndirect
Ответить с цитированием
  #5  
Старый 24.09.2008, 12:48
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Нашел тут на просторах своего HD, может поможет

Как создать ICO из BMP
--------------------------------------------------------------------------------





Нужно создать два bitmap'а: bitmap-маску ("AND" bitmap) и bitmap-картинку (XOR bitmap). Потом передать дескрипторы "AND" и "XOR" bitmap-ов API функции CreateIconIndirect():



Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  IconSizeX: integer;
  IconSizeY: integer;
  AndMask: TBitmap;
  XOrMask: TBitmap;
  IconInfo: TIconInfo;
  Icon: TIcon;
begin
  {Get the icon size}
  IconSizeX := GetSystemMetrics(SM_CXICON);
  IconSizeY := GetSystemMetrics(SM_CYICON);
  {Create the "And" mask}
  AndMask := TBitmap.Create;
  AndMask.Monochrome := true;
  AndMask.Width := IconSizeX;
  AndMask.Height := IconSizeY;
  {Draw on the "And" mask}
  AndMask.Canvas.Brush.Color := clWhite;
  AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
  AndMask.Canvas.Brush.Color := clBlack;
  AndMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);
  {Draw as a test}
  Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask);
  {Create the "XOr" mask}
  XOrMask := TBitmap.Create;
  XOrMask.Width := IconSizeX;
  XOrMask.Height := IconSizeY;
  {Draw on the "XOr" mask}
  XOrMask.Canvas.Brush.Color := ClBlack;
  XOrMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
  XOrMask.Canvas.Pen.Color := clRed;
  XOrMask.Canvas.Brush.Color := clRed;
  XOrMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);
  {Draw as a test}
  Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);
  {Create a icon}
  Icon := TIcon.Create;
  IconInfo.fIcon := true;
  IconInfo.xHotspot := 0;
  IconInfo.yHotspot := 0;
  IconInfo.hbmMask := AndMask.Handle;
  IconInfo.hbmColor := XOrMask.Handle;
  Icon.Handle := CreateIconIndirect(IconInfo);
  {Destroy the temporary bitmaps}
  AndMask.Free;
  XOrMask.Free;
  {Draw as a test}
  Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon);
  {Assign the application icon}
  Application.Icon := Icon;
  {Force a repaint}
  InvalidateRect(Application.Handle, nil, true);
  {Free the icon}
  Icon.Free;
end;
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #6  
Старый 24.09.2008, 12:50
vinni vinni вне форума
Начинающий
 
Регистрация: 26.01.2006
Сообщения: 135
Репутация: 10
По умолчанию

Imikle, можно поподробнее? Может пример есть?
Ответить с цитированием
  #7  
Старый 24.09.2008, 12:53
vinni vinni вне форума
Начинающий
 
Регистрация: 26.01.2006
Сообщения: 135
Репутация: 10
По умолчанию

cotseec, смотрел такой пример. Здесь Icon типа TIcon. Т.е. когда делаем Icon.Handle := CreateIconIndirect(IconInfo); - у нас иконка получается 16-ти цветная
Ответить с цитированием
  #8  
Старый 24.09.2008, 13:09
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

посмотри еще вот эти вырезки (приложил к коменту), в свое время пытался сделать то же самое (BMP в ICO), но исходники того, что у меня получилось потерялись безвозвратно
Вложения
Тип файла: zip Delphi.zip (7.5 Кбайт, 4 просмотров)
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #9  
Старый 27.09.2008, 11:47
kda6666 kda6666 вне форума
Прохожий
 
Регистрация: 15.08.2008
Сообщения: 15
Репутация: 10
По умолчанию

http://janych.selfip.com/examples/Delphi/Icons/
Посмотри тут, надеюсь поможет
Ответить с цитированием
  #10  
Старый 29.09.2008, 09:55
vinni vinni вне форума
Начинающий
 
Регистрация: 26.01.2006
Сообщения: 135
Репутация: 10
По умолчанию

Цитата:
Сообщение от kda6666
http://janych.selfip.com/examples/Delphi/Icons/
Посмотри тут, надеюсь поможет
это я уже видел. Проблема остается не решенной
Ответить с цитированием
  #11  
Старый 29.12.2008, 19:57
IgorX IgorX вне форума
Прохожий
 
Регистрация: 29.12.2008
Сообщения: 1
Репутация: 10
По умолчанию

Я например целый год над этим бился и в конце концов
http://www.softtelecom.ru/algreg.htm
часть исходников из Graphic Conveyer 2.5
Ответить с цитированием
  #12  
Старый 03.01.2009, 19:29
Jan_Janych Jan_Janych вне форума
Прохожий
 
Регистрация: 03.01.2009
Сообщения: 1
Репутация: 10
По умолчанию

Цитата:
Сообщение от vinni
cotseec, смотрел такой пример. Здесь Icon типа TIcon. Т.е. когда делаем Icon.Handle := CreateIconIndirect(IconInfo); - у нас иконка получается 16-ти цветная

Должна получаться truecolor, если битмапы truecolor. Только сохранить в файл эту иконку в Делфи не получится, так как нет там нормальной процедуры сохранения. Можно сохранить иконку так. Там же можно посмотреть, как иконки делаются, можно в конце концов записать иконку в Stream и прочитать оттуда LoadFromStream. Загружаются иконки вроде бы нормально.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:25.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter