Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как сохранять ярлыки с большой глубиной цвета 
V
    Опции темы
sono
Дата 6.4.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 10.1.2008
Где: KHARKOV

Репутация: нет
Всего: -1



Вот задачка -есть изображение битмап 32х32 (или 64х64) надо сохранить в формате .ico 
Казалось проблемы то и быть неможет так как подобные примеры уже рассматривались но там только для 8 битных цветов . Вот к примеру те примеры уже не работают для извлечения ярлыков из Word и Exel  так как там ярлыки походу сложные . Что делать.
PM MAIL   Вверх
Alexeis
Дата 6.4.2008, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



sono, чет я не понял, нужно битмапку в ico превратить или узнать какая иконка используется у ярлыка?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sono
Дата 6.4.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 10.1.2008
Где: KHARKOV

Репутация: нет
Всего: -1



Alexeis,  нужно битмапку в ico превратить   ,  я просто привёл случай где я  обламался  -- т.е. с обычными иконками (32х32 8-bit) у меня всё получилось  а , повторюся, извлекая сложный иконку на  битмап   (из тогоже word, ...) и сохраняя её в файл происходит потеря цвета . Короче всё происходит так:
Код


procedure TForm1.Button1Click(Sender: TObject);
var
ic: TIcon;
i: integer; 
begin
      image1.canvas.fillrect(canvas.cliprect);   //очищаем перед просмотром следующей иконки(если она конечно есть)
      if count=0 then if OpenDialog1.Execute = false then   Exit; // 
      count:=count+1    ;//счетчик иконок(глобальный) т.к. ехе может содержать несколько иконок
      form1.Label1.Caption:=inttostr(count);
      ic := TIcon.Create;
      ic.Handle := ExtractIcon(Application.Handle, PChar(OpenDialog1.FileName), count);
      Form1.image1.Canvas.Draw(0,0, ic);// НА КАНВЕ  ОТРИСОВЫВАЕТСЯ ПРОСТО ОТЛИЧНО
      ic.SaveToFile('tt.ico'); // А ТУТ БОКА -- СОХРАНЯЕТСЯ НО С ПОТЕРЕЙ ЦВЕТА....?
      ic.Destroy;
end;


      Короче так понимаю нужна какаято альтернатива    ic.SaveToFile('tt.ico'); ....?


PM MAIL   Вверх
Alexeis
Дата 6.4.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(sono @  6.4.2008,  11:19 Найти цитируемый пост)
  Короче так понимаю нужна какаято альтернатива    ic.SaveToFile('tt.ico'); ....?

 Да, совершенно верно. Иконка состоит из 2х частей секции IconDir в которой перечисляются все кадры иконки и собственно самих иконок. Чтобы сохранить иконку, нужно создать эту самую IconDir, затем получить цвета XOR маски (для 32х битный она единственная). В загруженном состоянии битмапка иконки это DDB, потому ее сначала прийдеться сконвертировать в DIB, для того чтобы получить доступ массиву цветов, после этого следует с тот же файл где сейчас находиться IconDir записать заголовок BITMAPINFOHEADER и массив цветов. Если иконка не 32х битная, то записываются 2е битмапки XOR маска и AND маска,  в формате 1 бит на пиксел.

  Вообще, формат иконок есть в MSDN очень подробно описан http://msdn2.microsoft.com/en-us/library/ms997538.aspx


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sono
Дата 6.4.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 10.1.2008
Где: KHARKOV

Репутация: нет
Всего: -1



Alexeis, спасибо есть над чем поразмышлять...

Добавлено через 10 минут и 20 секунд
Alexeis,  т.к. my english so bad   то разбор  http://msdn2.microsoft.com/en-us/library/ms997538.aspx  прийдётся перенести до лучших времён . Ну спасибо и за это.

PM MAIL   Вверх
sono
Дата 6.4.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 10.1.2008
Где: KHARKOV

Репутация: нет
Всего: -1



Alexeis,  Хотя погодите данная ссылка на предложенном URL ---вполне решила мою проблему (сразу не обратил внимание) .
Alexeis ну вам просто честь и хвала!!! smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.