Конвертируем битмап в иконку (ico)


Содержание

Конвертация BMP в ICO

BMP или Bitmap — растровый графический формат, совместимый с широким спектром программного обеспечения для просмотра и обработки изображений. BMP файлы хранят все пиксели изображения не применяя никакого сжатия. Формат ценен за способность сохранить первозданное качество изображения. Тем не менее, из-за отсутствия механизма сжатия, BMP файлы часто имеют огромный размер, что приводит к трудностям их хранения и передачи.

ICO файлы содержат изображения, используемые в качестве иконок для файлов, папок и программ на платформе Microsoft Windows. Иконки появляются на рабочем столе, в Проводнике Windows или в меню Пуск и помогают идентифицировать каждую деталь. ICO изображения, как правило, небольшого размера, являются масштабируемыми, они также могут служить в качестве логотипов веб-сайтов или символов, которые появляются в веб-браузере рядом с URL. Эквивалентом ICO файлов на компьютерах Mac является ICNS.

Как конвертировать BMP в ICO?

Самый простой способ — это скачать хорошую программу конвертации, например Фотоконвертер. Он работает быстро и эффективно, позволяя конвертировать любое количество BMP файлов за раз. Вы сможете довольно быстро оценить, что Фотоконвертер способен сэкономить массу времени которое вы будете тратить при работе вручную.

Скачайте и установите Фотоконвертер

Фотоконвертер легко скачать, установить и использовать — не нужно быть специалистом в компьютерах, чтобы понять как он работает.

Добавьте BMP файлы в Фотоконвертер

Запустите Фотоконвертер и загрузите .bmp файлы, которые вы хотите конвертировать в .ico

Вы можете выбрать BMP файлы через меню Файлы → Добавить файлы либо просто перекинуть их в окно Фотоконвертера.

Выберите место, куда сохранить полученные ICO файлы

В секции Сохранить вы можете выбрать папку для сохранения готовых .ico файлов. Можно так же потратить пару дополнительных минут и добавить эффекты для применения во время конвертации, но это не обязательно.

Выберите ICO в качестве формата для сохранения

Для выбора ICO в качестве формата сохранения, нажмите на иконку ICO в нижней части экрана, либо кнопку + чтобы добавить возможность записи в этот формат.

Теперь просто нажмите кнопку Старт и конвертация начнется мгновенно, а ICO файлы сохранятся в указанное место с нужными параметрами и эффектами.

Видео инструкция

Интерфейс командной строки

Профессиональные пользователи могут конвертировать BMP в ICO используя командную строку в ручном или автоматическом режиме. За дополнительными консультациями по использованию cmd интерфейса обращайтесь в службу поддержки пользователей.

Рассказать друзьям

Фотоконвертер

Фотоконвертер это эффективный пакетный конвертер из формата BMP в формат ICO. Программа позволяет быстро обрабатывать множество файлов и папок за один раз.

Конвертируем битмап в иконку (ico)

1. Click «Choose Files» button to select multiple files on your computer. You can also click the dropdown button to choose online file from URL, Google Drive or Dropbox.

2. Choose one or more icon sizes. The default icon size is 32×32. You can choose the «Customize size» option and enter a customized icon size. The format is [width]x[height], for example: 256×256.

3. Click «Convert Now!» button to start batch conversion. The output files will be listed in the «Conversion Results» section. Click icon to show file QR code or save file to online storage services such as Google Drive or Dropbox.

Преобразовать ICO в BMP и наоборот

Здравствуйте, в этой статье опять хотелось бы поговорить о преобразовании графических форматов. На данный момент хотел бы поговорить о форматах ico и bmp. Мы уже преобразовывали bmp в jpeg и различные метафайлы, на сей раз будет работать с «иконками». Немного поговорим о самом формате ico. Данный формат предназначен для хранения значков, все значки, которые присутствуют в исполняемых файлах — все это иконки. Данный формат аналогичен формата cur, который в Windows предназначен для хранения курсоров. Размеры значков могут быть любыми, можете Вы нарисовать какой Вам по душе, но наиболее распространенные — это квадратные иконки 16х16, 32х32 и так далее. Чем больше разрешение, соответственно тем больше они размером, но иконки по своей сути не очень уже и большие в плане места на диске, которые они занимают. Вообще ico формат очень похож по своей структуре на bmp, но отличаются они между собой тем, что имеет ico дополнительное изображение, а точнее если быть, то маске. И благодаря этой маске bmp не так легко было перевести назад в ico. Если на bmp, а точнее на ее канву выводили просто иконку (изображение), а потом под нужным форматом сохраняли, то с ico так не прокатит и пришлось думать, додумывать как более проще реализовать обратное преобразование.

Итак на форме устанавливаем TButton — 2 шт и приступаем к конвертированию ico в bmp. Самый простой способ — это просто напросто перерисовать нашу иконку на канву bmp изображения, мы это уже делали и при преобразовании с другими форматами, так что тут особо пояснять ничего не буду. На событие OnClick нашей кнопки пишем следующий код

А те кто играют в игры от Alawar, придется скачать генератор ключей для игр Alawar, совершенно бесплатно

Просто незабываем освобождать память от , созданных Вами переменных для работы с изображениями. Теперь приступим к преобразованию в обратном порядке. BMP в ICO преобразовать чуточку сложнее, как Вы помните я говорил, чем они между собой отличаются — маской, и у TIcon нету такого метода Draw, чтобы напрямую можно было перерисовать наше изображение, многие создают структуру файла ico и делают преобразование, но мы обойдемся TImageList, там зададим нужную нам маску и в путь, изображение преобразовано. Давайте на событие OnClick напишем следующий код

Мы создаем TImageList с нужным нам изображением и размерам, а потом ему задаем маску, по умолчанию это изображение записывается в TImageList под номером 0, затем просто с помощью GetIcon мы получаем это изображение и пересохраняем в нужном нам формате, как видите ничего сложного и все очень и очень просто. Также можно с помощью TImageList поступить и с преобразованием ico-bmp. Только в данном случае мы не будем задавать никакой маски, а напрямую из TImageList получим изображение и пересохраним его под нужным форматом. На событие OnClick напишем следующий код

Преобразование BitMap в Icon

Как мы видим, иконка (Icon)— это совсем не просто картинка 32×32 пиксела. По этой причине преобразование BitMap в Icon и обратно простым копированием невозможно. А как же быть, если мы страстно хотим создать иконку динамически, прямо при выполнении программы? Придется изворачиваться. Сейчас мы соорудим демонстрационную программу (доводить до полноценного приложения не будем), которая загружает произвольную картинку в формате JPEG или BMP, преобразует ее в иконку и сохраняет полученный ICO-файл. Заодно по ходу дела будут проиллюстрированы многие приемы работы с картинками в Delphi. В качестве пробного камня используем полноцветный женский портрет размером 800×600 пикселов на белом поле (я его заимствовал из сборника экранных обоев), логотип Apple в базовых цветах и фото бабочки, палитра которой изначально также была близка к базовой. Формат всех исходных файлов JPEG (файлы oboi359.jpg, apple.jpg и butterflyl.jpg находятся на диске в папке GlavalOM).

Создадим новый проект (папка GlavalOM), назовем его Iconka, разместим на форме компонент Panel, оставив справа свободное поле, покрасим его (свойство Color) в черный цвет и на него поставим компонент image— в точности так, как мы это делали в SiideShow в глсюе 2. У компонента image установим в True свойства stretch и Proportional. На форму добавим компонент Open- Dialog, у которого установим фильтр по файлам с изображениями JPEG и BMP (в правое поле в окне OpenDialogl.Filtcr надо вписать *.jpg; *.bmp). Собственно, формат BMP нам в этом примере в качестве исходного не пригодится, но в принципе не помешает, а реализовать его загрузку очень просто, т. к. JPEG все равно придется переводить в BMP для последующих манипуляций. Объявляем следующие переменные:

Jpglm: TJpeglmage; /объявляем переменную типа JPEGj

Bniplm, IcoBmp, XORmask, ANDmask: TBitMap; <переменные типа BitMap)

Сразу, не особенно разбираясь, соорудим процедуру уничтожения всех экземпляров классов при закрытии программы (кроме jpgim, которую мы будем уничтожать сразу после использования):

procedure TForml.FormClcse(Sender: TObject; var Action: TCloseAction);

ANDMask.Destroy; XORMask.Destroy; Icoanp.Destroy; Icolco.Destroy; Smplm.Destroy; except end; end;

Далее создадим процедуру инициализации диалога открытия файла при запуске программы, с тем. чтобы он открывался на текущем каталоге:

procedure TForml.FormCreate(Sender: TObject>; begin

Поставим на форму кнопку Buttoni с заголовком Load и напишем следующий обработчик для щелчка на ней:

procedure TForml.ButtonlClick(Sender: TObject); begin (Load – загрузка> Bmplm := TBitMap.Create; <создаем экземпляр объекта типа BitMap>If OpenDialogl.Execute then filename:=OpenDialogl.filename else exit; try

If ExtractFileExt(filename)=’.jpg’ then begin

<создаем экземпляробъекта типа JPEG> Jpglm.LoadFromFile(filename) ;

Bmplm.Assign(Jpglm); Jpglm.Destroy; end;

If ExtractFileExt(filename)=’.bmp’ then Bmplm.LoadFromFile(filename);

except exit; end;

Imagel.Picture.Assign(Bmplm); (выводим BitMap на экран> end;

Пробовать начнем с самого сложного образца — женского портрета. Вот результат загрузки его в окно Imagel (рис. 10.3).

Заметим, что компонент image можно было бы и не устанавливать, а рисовать прямо на канве формы или любого другого компонента, просто с ним в данном случае работать удобнее (но, как мы увидим позже, иногда дело идет лучше, если использовать другие компоненты).

Для начала нам надо решить проблему, как преобразовать прямоугольную картинку в квадратную без ее искажения, т. с. осуществить операцию cropping (букв, «подстригание»), известную по любому графическому редактору. Разумеется, если изначальная картинка квадратная и близка к тому, то этого делать не нужно (и, например, для логотипа Apple эту операцию следует пропустить). Несложно реализовать ручное указание области, которую нужно сохранить при данной операции, но я предоставляю читателю самому разобраться с этим делом, а здесь реализую автоматическое выделение квадрата по центру картинки, в зависимости от того, по какому измерению картинка больше — по высоте или по ширине. Поместим на форму кнопку Button2 (Crop) и напишем для нее следующий обработчик: procedure TForml. But. tori2ClicSc (Sender: TObject);

var x, у: integer;

Iисходное папе по центру картинки) RectT:=Rect(0,0,Bmplm.Height,Bmplm.Height); <поло, куда копировать) end else <если больше по высоте) begin

Bmplm. Canvas. CopyMode: =cm3rсСору ;

<режим копирования – на всякий случай/ Bmplm.Canvas. CopyRect. (RectT, Bmplm. Canvas, RectS); I копируем) Bmplm.W >

Рис- 10.3. Образец для преобразования BitMap а иконку

Далее нам нужен BitMap размером 32×32, стандартный размер иконки. Можно все сделать в исходном BitMap, но мы его сохраним на всякий случай в неприкосновенности, и скопируем изображение в новый BitMap icoBmp. Поставим на форму еще одну кнопку Button3 (Resize) и напишем для нее такой обработчик:

procedure TForml.Button3Click(Sender: TObject); begin (Resise уменьшаем до размера 32×32 f IcoBmp := TBitMap.Create;

(создаем экземпляр объекта тила BitMap> IcoBmp.Height:=32; (новая картинка 32×32) IcoBmp.W >

RectT:=Rect(0,0,32,32); (поле, куда копировать) IcoBmp.Canvas.StretchDraw(RectT,Bmplm);

(копируем с усечением размеров) Imagel. Proportional’.-False; (демонстрировать будемI Imagel.Stretch:=False; (в натуральном виде) Imagel. Picture. Assign (IcoBmp); /’вызолим BiШар на экран) st:=ExtractFilename(filename); (меняем имя файла) filename: =’0’+s t;

(чтобы не путать с исходным, папку можно не указывать) IcoBmp.SaveToFile(ChangeFileExt(filename,’.bmp’)); end;

Заметки на полях

Обратите внимание на один нюанс в обращении с областями типа TRcct и параметрами width и Height BitMap. В качестве конечной точки по X и по Y здесь указывается величина, отстоящая от начальной на величину общего количества точек (а не номер конечной точки, если считать начальную за нулевую). То есть верхняя граница будет на единицу больше, чем это было бы при указании границы массива. Далее, когда мы будем иметь дело с массивом Pixels канвы, там те же границы будут указываться нормально: (0. .31), т. е. всего 32 элемента. Эту разницу легко понять из определений массива и прямоугольника из точек: массив massiv [0. .1,0. Л] имеет четыре элемента, а прямоугольник rect (0,1,0,1) — один-единственный!

Для контроля мы выводим полученный BitMap в файл с именем исходного, но начинающимся с символа «0». На экран мы выводим картинку в натуральном, а не растянутом виде, чтобы убедиться, что изображение действительно уменьшилось. Далее мы хотим посмотреть, как это будет выглядеть в растянутом виде— ведь именно IcoBmp у нас будет представлять потом маску xoRMask. Для этого поставим на форму еще одну кнопку Buttons (Stretch) и напишем для нее такой обработчик:

procedure TForml .Button’lClick (Sender: TObject); begin (Stretch – растягиваем для наглядности! Imagel.Proportional:=True; Imagel.Stretch:=True; Imagel.Repaint; <перерисовать заново) end;

Результат демонстрации будущей иконки в увеличенном виде показан на рис. 10.4.

Рис. 10.4. Будущая иконка 32×32 в увеличенном виде

Теперь займемся конструированием ANDMask. Для этого придется создать монохромный битмэп и скопировать в него наше изображение. Добавим еще одну кнопку Buttons (ANDMask) и вот такой обработчик для нее:

procedure TForml.ButtonbClick(Sender: TObject);

begin (Создаем маску And)

Imagel.Picture.Assign(AndMask); (вывода AND на экран!

Вот что мы увидим на экране— рис. Ю.5. В принципе нам сейчас не очень важно, какая именно маска получится — рисунок в ANDMask важен лишь при формировании «прозрачного» цвета, в остальных случаях, как мы говорили, можно сделать просто черный прямоугольник, а прозрачностью мы займемся позднее.

Рис. 10.6. Маска ANDMask в увеличенном виде

Теперь можно заняться, наконец, собственно иконкой. Создавать мы ее будем с помощью функции API Createiconindirect, которая требует заполнения структуры iconinfo (устроенной много проще, чем структура bitmapinfo). Поставим на форму еще одну кнопку Buttons (далеко не последнюю, как вы увидите) и создадим обработчик щелчка для нее. Здесь я для наглядности скопировал картинку 32×32 из icoBmp в новый BitMap xoRMask, разумеется, можно обойтись и без этих промежуточных преобразований (и даже вообще использовать изначальный Bmpim, если его не жалко):


procedure TForml.Button6Click(Sender: TObject); begin (Icon – превращаем в иконку> XORMask:= TBitMap.Create;

XORMask.Assign(IcoBmp); /в качестве XOR-маски используем наш BMP)

(ChangeFileExt(OpenDialogl.filename, ‘.ico’)); (выводим иконку на экран)

В качестве комментария к параметру icoinfo.ficon я привел строку из официального описания этой структуры: «величина True специфицирует иконку». Два следующих параметра имеют значение, если мы создаем курсор, а не иконку. Имейте это в виду, если захотите создавать свои курсоры, они создаются в точности так же, как и иконка. Лично мне никогда этого делать не приходилось, потому что, на мой взгляд, всякая самодеятельность в этом отношении может только раздражать пользователей (и, например, в фирменных графических редакторах раздражает безумно). В 99% случаев достаточно обычного курсора в виде стрелки, а для оставшегося одного процента, когда это действительно необходимо, например в браузерах при указании на ссылку, Windows предлагает вполне приличный набор готовых.

Илон Маск рекомендует:  Faq как скрыть таскбар

Но результат, появившийся в imagei после выполнения этой процедуры, нас обескуражит: иконка получится черно-белой (поэтому мы кнопку Buttone назвали Icon B&W). Проверьте полученный файл с именем oboi350.ico — в нем также окажется черно-белая иконка. Для того чтобы рассмотреть подробнее, что именно получилось, нам следует, во-первых, перезагрузить иконку из полученного файла, во-вторых, превратить ее в BitMap — при простом отображении иконки на канве она не растягивается, а демонстрируется только в оригинальном размере 32×32, изображение иконки на канве не зависит от свойства stretch. Поставим на форму кнопку Button7 (Icon Stretch) и для нее напишем такой обработчик:

procedure TForml..Bu»;ton7Click (Sender: TObjec.t);

begin I Icon Stretch — растягиваем готовую иконку!

IcoBmp.Destroy; (все заново>

Icolco.LoadFromFile(ChangeFileExt(OpenDialogl.filename, ‘.ico’)); IcoBmp.W >

IcoBmp.Canvas.Draw(0,0,Icolco); (преобразуем в BitMap> Imagei.Picture.Assign(IcoBmp);(выводим ICO на экран> end;

При рассмотрении в увеличенном виде окажется, что отдельные цветные пятна на женском портрете все же имеются. Это связано с тем, что исходное изображение было TrueColor, а в случае иконок Delphi разбирает только 16 базовых цветов, которых у нас в данном случае почти нет. Если же мы поэкспериментируем с другими примерами, то увидим, что они отображаются относительно нормально — логотип apple.jpg, например, вообще перенесется в иконку практически один к одному, даже с намеками на тени, из-за того.

что он практически из одних базовых цветов и состоит. Есть два пути решения этой проблемы — один заключается в том, чтобы самостоятельно, полностью с нуля, создать и записать файл иконки, использовав там то количество цветов, какое нам нужно. Неплохое описание подобного процесса имеется в базе FAQ по Delphi [24]. Этот путь вполне нормален для DOS (и автор в свое время создавал такие файлы, написав вполне работоспособный, хотя и не очень удобный DOS-редактор иконок), но мы же живем в эпоху Windows!

Попробуем просто сделать так, чтобы в нашей иконке содержались одни базовые цвета, т. е. реализуем операцию редукции цветов. Причем наша задача— именно свести палитру к базовой, а не просто сократить количество цветов до 16, как это делают графические редакторы по умолчанию. Преобразование исходной картинки в 16-цветную в каком-либо редакторе нам не поможет, потому что к базовому набору цветов палитру если и удастся свести, то результат будет весьма плачевный (см. в папке с проектом эксперименты с файлом oboil6col.bmp, полученным из нашего женского портрета редукцией цветов к базовым через Photoshop). Простое приравнивание палитры иконки палитре исходной XOR-маски также не помогает, даже если исходный файл 16-цветный — скорее всего, на исходную палитру загружаемого изображения переменная типа BitMap в Delphi просто не обращает внимания, всегда формируя 24-битное изображение. Можно попробовать создать отдельно только XOR-маску вручную (через функции API или непосредственно), но этот способ все равно не был бы универсальным, т. к. в формате JPEG вообще может присутствовать только 24-битное представление цвета, и огромное количество подготовительной работы по сведению их к 16 цвет ам и пересохранению в формате BMP обессмыслило бы всю затею автоматического формирования иконки.

Среди методов класса TBitMap есть процедура присвоения глубины цвета, например, МОЖНО попробовать записать XORMask. PixelFormat:=pf $80) or (colG>$80) or (colB>$80) then begin <светлый цвет) if colR>$80 then colR:=$FF else colR:=0; if colG>580 then colG:=$FF else colG:=0; if colB>$80 then colB:=$FF else colB:=0; end else <темный цвет) begin

if colR>$40 then colR:=$80 else colR:=0; if colG>$40 then colG:=$80 else colG:=0; if colB>$40 then colB:=$80 else colB:=0;

xcol:=colR+256*colG+65536*colB; (собираем цвет обратно) XORMask.Canvas.Pixels[x,yl:=xcol; end;

Imagel.Picture.Assign (XORMask); (выводим XOR на экран) end;

Результат (рис. 10.6) в данном случае будет, прямо скажем, «не очень» — хотя и несколько лучше, чем при экспериментах с Photoshop (сравните иконки в файлах oboi350.ico и oboil6coI.ico). Читатели самостоятельно могут поэкспериментировать с указанным алгоритмом, с целью улучшить качество изображения (например, хотя бы ввести светло-серый). А вот с другими образцами все куда лучше, хотя с ними и изначально было неплохо (рис. 10.7)— что есть следствие наличия нужных или близких цветов в оригинальном изображении. Для логотипа Apple, например, всего лишь уберется тень, что даже лучше при последующем преобразовании в «прозрачную» иконку. Для большего понимания, что происходит с масками при их взаимодействии, сравните все увеличенные результаты для масок AND, XOR и самой иконки для образца с логотипом Apple.

Но никто и не утверждал, что любой JPEG можно автоматически превратить в иконку и при этом сразу получить идеальный результат. Для достижения

Рис. 10.6. Результет редукции цветов для женского портрете

Рис. 10-7. Иконка бвбочки в натуральном виде (а) и после редукции цветов (б)

абсолютно адекватного результата недостаточно даже ручного редактирования, получить его можно только, если использовать иконки TrueColor. Но и тогда для получения более-менее приемлемого результата ручное вмешательство потребуется, и для этого созданную нами программу стоит превратить в нормальный редактор иконок. Это теперь несложно, причем с реализацией встречающейся достаточно редко функции превращения в иконку произвольного изображения. Читатель уже вполне может самостоятельно с этим справиться.

Для того чтобы переделать иконку окончательно, поставим еще одну кнопку Buttons (Icon) и напишем такой обработчик:

Icolco.Destroy; (будем создавать заново)

(ChangeFileExt(OpenDialogl.filename,’.ico’)); (выводим иконку на экран)

Для того чтобы завершить тему создания иконок, нужно ответить на вопрос — как реализовать «прозрачный» цвет? Так как мы имеем все маски, то проще всего сделать это вручную, преобразованием пикселов. Мы покажем процедуру опять же на примере автоматического преобразования — попробуем осуществить замену заданного цвета на «прозрачный».

Чтобы не возиться с CoiorBox или другими вариантами «цветовых» компонентов в этой пародии на настоящее приложение, которое мы создаем, для задания цвета поставим на форму компонент CoiorDialog и только заменим у него свойство Color на ciwhite. Решение очень неаккуратное, но для нас здесь, как временное решение, сойдет— мы хотим лишь показать, как и что делать в соответствующей ситуации. Поставим на форму очередную кнопку Buttonio (Icon) и вот как будет выглядеть обработчик для нее:

procedure TForml.ButtonlOClick(Sender: TObject); var x,у:integer;

begin <прозрачный цвет) if ColorDialog1.Execute then begin for x:=0 to 31 do

for y:=0 to 31 do

if XORMask.Canvas.Pixels[x,y]= ColorDialogl.Color then

XORMask.Canvas.Pixels[x,y]:=0; ANDMask.Canvas.Pixels[x,у]:=clWhite; end;

Icolco.Destroy; <будем создавать заново>Icolco := TIcon.Create; Icolnfo.flcon := True; Icolnfo.xHotspot := 0; Icolnfo.yHotspot := 0; Icolnfo.hbmMasк ANDMask.Handle; Icolnfo.hbmColor := XORMask.Handle; Icolco.Handle : = Createiconindirect(Icolnfo); Icolco.SaveToFile(ChangeFileExt(OpenDialogl.filename, 1 .ico’)); Imagel.Picture.LoadFromFile(ChangeFileExt (OpenDialogl.filename, ‘.ico’));

Чтобы понять, что именно тут делается, обратитесь к описанию принципа совместной работы масок AND и XOR ранее. Осталось только показать, как лихо можно подменить иконку самого приложения прямо на ходу. Поставим на форму последнюю кнопку Buttonli (USE). Обработчик будет состоять всего из одной строки:

procedure TForml.ButtonllClick(Sender: TObject); begin

После нажатия на кнопку USE текущая иконка, которая содержится в icolco, сразу появится в заголовке формы.

Заметки на полях

Читатель вправе задать вопрос — а почему для задания «прозрачного» цвета нельзя воспользоваться удобным механизмом, который предлагают свойства TransparentColor и TransparentMode класса TBitMap? Дело В том, что они работают только при отображении BitMap на экране и никак не сказываются на представлении карты битов в памяти, т. е. при сохрвнении в файл, копировании в другой BitMap или переносе в иконку эти свойстве «пропадают». Попробуйте внести в самую первую процедуру по нажатию But сот следующие строки (их нвдо вставить непосредственно перед звгрузкой квртинки в imagei операцией Assign):

При загрузке женского портрета белый фон станет «прозрачным» (выглядеть это будет довольно неаккуратно, т. к. отдельные области фона, нв первый взгляд тоже белые, на самом деле таковыми не являются). Но уже на третьем шаге (при переводе в размер 32×32) прозрачность «кудв-то» исчезнет. Звметим, что отсутствие функции указания диапазона цветов сильно ограничивает возможности механизма, фвктически он применим только к картинкам с однородными по цвету полями (даже логотип Apple из-за нвличия теней не будет отобрвжать- ся как надо). Если вы хотите отображать с эффектом прозрачности произвольные картинки с широкой гвммой цветов, то вам либо придется кропотливо заменять нужные цвете (например, все светлые) на какой-то один, который потом объявляется «прозрачным», либо не миновать «ручной» процедуры создания масок по типу, квк мы это делали для иконки. Создавать саму иконку, конечно, не нужно, маски AND и XOR (произвольного размера) комбинируются с фоном также вручную с использованием функции API BitBit или даже проще — путем задвния свойства CopyMode при использовании процедуры CopyRect.

Дадим здесь и пару советов, как прввильно пользоваться механизмом отображения «прозрачных» BitMap. Вопреки распространенному мнению, если вы задаете свой собственный цвет, который должен стать прозрачным, параметр TransparentMode специально устанавливать в значение rnrixed не надо — это происходит автоматически при установке свойства TransparentCoior. Единственное, когда требуется установка TransparentMode — когда вы отказываетесь от собственного цвета, вы звдаете свойству знвчение tmAuto, и цвет будет определяться левым нижним пикселом изображения (именно нижним, хотя в фирменной справке все запутали, указав на два возможных варианта — в Windows, как мы знвем, формат BMP начинается с нижней строки). В этом случае, нвоборот, устанавливать свойство TransparentCoior уже нельзя. Кроме этого, чтобы отображение «прозрачного» цвета прошло успешно, надо не эа- быввть устанавливать свойство Transparent соответствующего компонента в True (у нас это Imagei).

Если стоит задача изменить готовую иконку, то ее надо загрузить из файла, как мы делали раньше. Получить доступ к маске XOR можно также описанным ранее способом через процедуру Draw канвы любого BitMap, а вот с AND-маской придется повозиться. Сначала нужно получить структуру

Icolnfo : TIconlnfo; Icolco : TIcon;

В результате в icoinfo окажется структура icon info нашей иконки, а в ней, как мы уже знаем, содержатся дескрипторы масок под названиями tibmMe.sk (маска AND) и hbmcolor (маска XOR). Далее необходимо извлечь информацию ПО НУЖНОМУ Дескриптору, причем ПрОСТО Приравнять Bmplm. Handle: = icoinfo.hbmMssk не выйдет, надо действовать через глобальную кучу. Так что в самом простом случае при изменениях готовой иконки проще будет сформировать AND-маску заново— кажется, именно так и поступал Image Editor старых версий Delphi.

В целом наша программа, как готовое приложение, разумеется, никуда не годится — если сразу после запуска случайно нажать на любую из кнопок, кроме Load, получите кучу претензий за обращение к несуществующим объектам. Но мы ее здесь создавали только в качестве иллюстрации того, как вообще надо обращаться с иконками и BitMap.

Источник: Ревнч Ю. В. Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

Конвертируем изображения PNG в ICO

Формат ICO чаще всего применяется для изготовления фавиконов – иконок сайтов, которые отображаются при переходе на веб-страницы на вкладке браузера. Чтобы изготовить этот значок, часто приходится преобразовывать картинку с расширением PNG в ICO.

Приложения для переформатирования

Чтобы выполнить преобразование PNG в ICO, можно использовать онлайн-сервисы или применять программы, инсталлированные на ПК. Последний вариант мы рассмотрим более подробно. Для конвертирования в указанном направлении можно использовать следующие виды приложений:

  • Редакторы графики;
  • Конвертеры;
  • Просмотрщики рисунков.

Далее мы рассмотрим процедуру преобразования PNG в ICO на примерах отдельных программ из вышеназванных групп.

Способ 1: Фабрика Форматов

Вначале рассмотрим алгоритм переформатирования в ICO из PNG при помощи конвертера Формат Фактори.

    Запустите приложение. Щелкните по наименованию раздела «Фото».

Открывается перечень направлений преобразования, представленный в виде иконок. Кликните по значку «ICO».

В открывшемся окне выбора картинки войдите в месторасположение исходного PNG. Обозначив указанный объект, используйте «Открыть».

Название выбранного объекта отобразится в перечне в окне параметров. В поле «Конечная папка» вписан адрес каталога, в который будет отправлен преобразованный фавикон. Но при надобности можете изменить эту директорию, достаточно щелкнуть «Изменить».

Перейдя с помощью инструмента «Обзор папок» к каталогу, где вы желаете хранить фавикон, выделите его и кликните «OK».

Происходит возврат в главное окно программы. Как видим, настройки поставленной задачи отображаются в отдельной строке. Для запуска преобразования выделите данную строку и кликните «Старт».

Происходит переформатирование изображения в ICO. После завершения задачи в поле «Состояние» будет установлен статус «Выполнено».

Чтобы перейти в директорию месторасположения фавикона, выделите строку с задачей и кликните по значку, размещенному на панели – «Конечная папка».

  • Запустится «Проводник» в той области, где размещен готовый фавикон.
  • Способ 2: Фотоконвертер Стандарт

    Далее мы рассмотрим пример выполнения изучаемой процедуры с помощью специализированной программы для преобразования картинок Фотоконвертер Стандарт.

      Запустите Фотоконвертер Стандарт. Во вкладке «Выбрать файлы» щелкните по значку «+» с надписью «Файлы». В раскрывшемся перечне жмите «Добавить файлы».


    Открывается окно выбора рисунка. Зайдите в месторасположение PNG. Обозначив объект, применяйте «Открыть».

    Выбранный рисунок отобразится в основном окне программы. Теперь нужно указать конечный формат преобразования. Для этого справа от группы значков «Сохранить как» в нижней части окна щелкните по значку в форме знака «+».

    Открывается дополнительное окно с огромным перечнем графических форматов. Жмите «ICO».

    Теперь в блоке элементов «Сохранить как» появился значок «ICO». Он активный, а это означает, что именно в объект с этим расширением будет производиться преобразование. Чтобы указать конечную папку хранения фавикона, щелкайте по названию раздела «Сохранить».

  • Открывается раздел, в котором можно указать каталог сохранения преобразованного фавикона. Переставляя положение радиокнопки можно выбрать, где именно будет сохраняться файл:
    • В той же папке, что и исходник;
    • Во вложенном в исходную директорию каталоге;
    • Произвольный выбор каталога.

    При выборе последнего пункта существует возможность указать любую папку на диске или подключенном носителе. Щелкайте «Изменить».

    Открывается «Обзор папок». Укажите каталог, где желаете хранить фавикон, и жмите «OK».

    После того, как путь к выбранной директории отобразился в соответствующем поле, можно запускать преобразование. Жмите для этого «Старт».

    Выполняется переформатирование изображения.

    После его окончания в окошке трансформации отобразится информация — «Конвертация завершена». Чтобы перейти в папку размещения фавикона, жмите «Показать файлы…».

  • Запустится «Проводник» в том месте, где расположен фавикон.
  • Способ 3: Gimp

    Переформатировать в ICO из PNG умеют не только конвертеры, но и большинство графических редакторов, среди которых выделяется Gimp.

      Откройте Гимп. Щелкайте «Файл» и выбирайте «Открыть».

    Запускается окно выбора картинки. В боковом меню отметьте диск расположения файла. Далее перейдите в каталог его местонахождения. Выделив объект PNG, применяйте «Открыть».

    Картинка появится в оболочке программы. Для того чтобы её преобразовать, щелкайте «Файл», а затем «Export As…».

    В левой части открывшегося окна укажите диск, на котором хотите хранить получившееся изображение. Далее перейдите в желаемую папку. Щелкайте по пункту «Выберите тип файла».

    Из раскрывшегося перечня форматов выбирайте «Значок Microsoft Windows» и жмите «Экспортировать».

    В появившемся окошке просто жмите «Экспорт».

    Илон Маск рекомендует:  Термины Delphi
  • Картинка будет преобразована в ICO и разместится в той области файловой системы, которую пользователь указал ранее при настройке преобразования.
  • Способ 4: Adobe Photoshop

    Следующий графический редактор, умеющий преобразовывать PNG в ICO, называется Photoshop от компании Adobe. Но дело в том, что в стандартной сборке возможность сохранения файлов в нужном нам формате у Фотошопа не предусмотрена. Для того чтобы получить данную функцию, нужно установить плагин ICOFormat-1.6f9-win.zip. После загрузки плагина следует распаковать его в папку с таким шаблоном адреса:

    C:\Program Files\Adobe\Adobe Photoshop CS№\Plug-ins

    Вместо значения «№» необходимо ввести номер версии вашего Фотошопа.

      После установки плагина откройте Фотошоп. Кликните «Файл» и затем «Открыть».

    Запускается окошко выбора. Заходите в месторасположение PNG. Выделив рисунок, применяйте «Открыть».

    Запустится окошко, предупреждающие об отсутствии встроенного профиля. Жмите «OK».

    Картинка открыта в Фотошопе.

    Теперь нужно произвести переформатирование PNG в нужный нам формат. Снова щелкайте «Файл», но на этот раз кликните «Сохранить как…».

    Запускается окошко сохранения файла. Переместитесь в каталог, где желаете хранить фавикон. В поле «Тип файлов» выберите «ICO». Жмите «Сохранить».

  • Фавикон сохранен в формате ICO в указанном месте.
  • Способ 5: XnView

    Переформатировать в ICO из PNG умеет ряд многофункциональных просмотрщиков картинок, среди которых выделяется XnView.

      Запустите XnView. Кликните «Файл» и выбирайте «Открыть».

    Появляется окошко выбора рисунка. Переместитесь в папку месторасположения PNG. Обозначив этот объект, используйте «Открыть».

    Теперь снова жмите «Файл», но в данном случае выбирайте позицию «Сохранить как…».

    Открывается окошко сохранения. С его помощью перейдите в место, где планируете хранить фавикон. Затем в поле «Тип файла» выберите пункт «ICO — Windows Icon». Жмите «Сохранить».

  • Картинка сохранена с назначенным расширением и в указанном месте.
  • Как видим, существует несколько видов программ, с помощью которых можно преобразовать в ICO из PNG. Выбор конкретного варианта зависит от личных предпочтений и условий преобразования. Для массового конвертирования файлов больше всего подойдут конвертеры. Если вам нужно произвести одиночное преобразование с редактированием исходника, то для этого пригодится графический редактор. А для простого одиночного конвертирования вполне подойдет и продвинутый просмотрщик картинок.

    Отблагодарите автора, поделитесь статьей в социальных сетях.

    Конвертировать любое изображение в формат ICO (иконки для Microsoft Windows)


    Быстро и прямо онлайн

    Создайте файл иконки с размером 16px, 32px, 64px, 128px или 256px.

    Как конвертировать мое изображение в иконку с расширением .ico?

    Это действительно совсем не сложно, чтобы создать иконку для microsoft windows, просто выберите ваши файлы изображений, и иконки будут готовы с большим выбором размеров :)

    Много форматов поддерживается

    Наш онлайн-сервис может поддерживать множество форматов файлов изображений, таких как jpg, png, bmp, gif. и вы можете конвертировать их, как хотите.

    Конвертировать несколько изображений в один ico файл?

    Да, это возможно, с нашим инструментом вы можете загрузить несколько картинок, и они будут преобразованы в один файл иконки для рабочего стола.

    Как насчет качества и окончательного размера?

    Конечное качество будет зависеть от ваших исходных файлов, поэтому мы рекомендуем Вам использовать наилучшее качество изображения для очень хорошего качества иконки. На данный момент созданная иконка будет иметь такие размеры: 16px, 32px, 64px, 128px или 256px.

    100% безопасно

    Все ваши загрузки и конвертированные изображения будут удалены автоматически с нашего сервера. Мы не храним никаких изображений.

    BMP to ICO

    Convert BMP to ICO — online and free — this page also contains information on the BMP and ICO file extensions.

    How to convert a BMP to a ICO file?

    1. Choose the BMP file that you want to convert.
    2. Select ICO as the the format you want to convert your BMP file to.
    3. Click «Convert» to convert your BMP file.

    Zamzar Pro Tip: You can use MS Paint or most standard Image programs to open BMP files. If you own a Mac then you could use Mac Preview.

    Drag & drop files, or select link

    Or choose a different format

    (And agree to our Terms)

    Email when done?

    Drop your files to convert them

    We’ll get right on it

    Files to Convert

    Overall conversion/upload progress:

    File Size File extension .bmp
    Category Image File
    Description BMP is a standard image file format which was historically used by computers running the Windows operating system. The format is more commonly know as Bitmap files. The term bitmap was originally coined in computer programming to refer to a map of bits. Historically when you saved an image on your home PC you might have saved it as a .bhp file, this is becoming less common with .jpeg the preferred image file format with the advent of digital cameras.
    Actions BMP to ICO — Convert file now
    View other image file formats
    Technical Details Bitmap files are housed in a device-independent bitmap (DIB) format. The term device independent means that the bitmap specifies pixel color in a form independent of the method used by a display to represent color. This enables Windows to show the bitmap on any type of display device — such as your monitor.
    Associated programs Adobe Photoshop
    MS Paint
    Microsoft Photo Editor
    Paintbrush
    Developed by Microsoft
    MIME type Image/x-ms-bmp
    Useful links More detailed information on BMP files
    What programs can I use to open a BMP file ?
    Convert BMP file

    begin (Создаем маску And)

    Imagel.Picture.Assign(AndMask); (вывода AND на экран!

    Вот что мы увидим на экране— рис. Ю.5. В принципе нам сейчас не очень важно, какая именно маска получится — рисунок в ANDMask важен лишь при формировании «прозрачного» цвета, в остальных случаях, как мы говорили, можно сделать просто черный прямоугольник, а прозрачностью мы займемся позднее.

    Рис. 10.6. Маска ANDMask в увеличенном виде

    Теперь можно заняться, наконец, собственно иконкой. Создавать мы ее будем с помощью функции API Createiconindirect, которая требует заполнения структуры iconinfo (устроенной много проще, чем структура bitmapinfo). Поставим на форму еще одну кнопку Buttons (далеко не последнюю, как вы увидите) и создадим обработчик щелчка для нее. Здесь я для наглядности скопировал картинку 32×32 из icoBmp в новый BitMap xoRMask, разумеется, можно обойтись и без этих промежуточных преобразований (и даже вообще использовать изначальный Bmpim, если его не жалко):

    procedure TForml.Button6Click(Sender: TObject); begin (Icon – превращаем в иконку> XORMask:= TBitMap.Create;

    XORMask.Assign(IcoBmp); /в качестве XOR-маски используем наш BMP)

    (ChangeFileExt(OpenDialogl.filename, ‘.ico’)); (выводим иконку на экран)

    В качестве комментария к параметру icoinfo.ficon я привел строку из официального описания этой структуры: «величина True специфицирует иконку». Два следующих параметра имеют значение, если мы создаем курсор, а не иконку. Имейте это в виду, если захотите создавать свои курсоры, они создаются в точности так же, как и иконка. Лично мне никогда этого делать не приходилось, потому что, на мой взгляд, всякая самодеятельность в этом отношении может только раздражать пользователей (и, например, в фирменных графических редакторах раздражает безумно). В 99% случаев достаточно обычного курсора в виде стрелки, а для оставшегося одного процента, когда это действительно необходимо, например в браузерах при указании на ссылку, Windows предлагает вполне приличный набор готовых.

    Но результат, появившийся в imagei после выполнения этой процедуры, нас обескуражит: иконка получится черно-белой (поэтому мы кнопку Buttone назвали Icon B&W). Проверьте полученный файл с именем oboi350.ico — в нем также окажется черно-белая иконка. Для того чтобы рассмотреть подробнее, что именно получилось, нам следует, во-первых, перезагрузить иконку из полученного файла, во-вторых, превратить ее в BitMap — при простом отображении иконки на канве она не растягивается, а демонстрируется только в оригинальном размере 32×32, изображение иконки на канве не зависит от свойства stretch. Поставим на форму кнопку Button7 (Icon Stretch) и для нее напишем такой обработчик:

    procedure TForml..Bu»;ton7Click (Sender: TObjec.t);

    begin I Icon Stretch — растягиваем готовую иконку!

    IcoBmp.Destroy; (все заново>

    Icolco.LoadFromFile(ChangeFileExt(OpenDialogl.filename, ‘.ico’)); IcoBmp.W >

    IcoBmp.Canvas.Draw(0,0,Icolco); (преобразуем в BitMap> Imagei.Picture.Assign(IcoBmp);(выводим ICO на экран> end;

    При рассмотрении в увеличенном виде окажется, что отдельные цветные пятна на женском портрете все же имеются. Это связано с тем, что исходное изображение было TrueColor, а в случае иконок Delphi разбирает только 16 базовых цветов, которых у нас в данном случае почти нет. Если же мы поэкспериментируем с другими примерами, то увидим, что они отображаются относительно нормально — логотип apple.jpg, например, вообще перенесется в иконку практически один к одному, даже с намеками на тени, из-за того.

    что он практически из одних базовых цветов и состоит. Есть два пути решения этой проблемы — один заключается в том, чтобы самостоятельно, полностью с нуля, создать и записать файл иконки, использовав там то количество цветов, какое нам нужно. Неплохое описание подобного процесса имеется в базе FAQ по Delphi [24]. Этот путь вполне нормален для DOS (и автор в свое время создавал такие файлы, написав вполне работоспособный, хотя и не очень удобный DOS-редактор иконок), но мы же живем в эпоху Windows!

    Попробуем просто сделать так, чтобы в нашей иконке содержались одни базовые цвета, т. е. реализуем операцию редукции цветов. Причем наша задача— именно свести палитру к базовой, а не просто сократить количество цветов до 16, как это делают графические редакторы по умолчанию. Преобразование исходной картинки в 16-цветную в каком-либо редакторе нам не поможет, потому что к базовому набору цветов палитру если и удастся свести, то результат будет весьма плачевный (см. в папке с проектом эксперименты с файлом oboil6col.bmp, полученным из нашего женского портрета редукцией цветов к базовым через Photoshop). Простое приравнивание палитры иконки палитре исходной XOR-маски также не помогает, даже если исходный файл 16-цветный — скорее всего, на исходную палитру загружаемого изображения переменная типа BitMap в Delphi просто не обращает внимания, всегда формируя 24-битное изображение. Можно попробовать создать отдельно только XOR-маску вручную (через функции API или непосредственно), но этот способ все равно не был бы универсальным, т. к. в формате JPEG вообще может присутствовать только 24-битное представление цвета, и огромное количество подготовительной работы по сведению их к 16 цвет ам и пересохранению в формате BMP обессмыслило бы всю затею автоматического формирования иконки.

    Среди методов класса TBitMap есть процедура присвоения глубины цвета, например, МОЖНО попробовать записать XORMask. PixelFormat:=pf $80) or (colG>$80) or (colB>$80) then begin <светлый цвет) if colR>$80 then colR:=$FF else colR:=0; if colG>580 then colG:=$FF else colG:=0; if colB>$80 then colB:=$FF else colB:=0; end else <темный цвет) begin

    if colR>$40 then colR:=$80 else colR:=0; if colG>$40 then colG:=$80 else colG:=0; if colB>$40 then colB:=$80 else colB:=0;

    xcol:=colR+256*colG+65536*colB; (собираем цвет обратно) XORMask.Canvas.Pixels[x,yl:=xcol; end;

    Imagel.Picture.Assign (XORMask); (выводим XOR на экран) end;

    Результат (рис. 10.6) в данном случае будет, прямо скажем, «не очень» — хотя и несколько лучше, чем при экспериментах с Photoshop (сравните иконки в файлах oboi350.ico и oboil6coI.ico). Читатели самостоятельно могут поэкспериментировать с указанным алгоритмом, с целью улучшить качество изображения (например, хотя бы ввести светло-серый). А вот с другими образцами все куда лучше, хотя с ними и изначально было неплохо (рис. 10.7)— что есть следствие наличия нужных или близких цветов в оригинальном изображении. Для логотипа Apple, например, всего лишь уберется тень, что даже лучше при последующем преобразовании в «прозрачную» иконку. Для большего понимания, что происходит с масками при их взаимодействии, сравните все увеличенные результаты для масок AND, XOR и самой иконки для образца с логотипом Apple.

    Но никто и не утверждал, что любой JPEG можно автоматически превратить в иконку и при этом сразу получить идеальный результат. Для достижения

    Рис. 10.6. Результет редукции цветов для женского портрете

    Рис. 10-7. Иконка бвбочки в натуральном виде (а) и после редукции цветов (б)

    абсолютно адекватного результата недостаточно даже ручного редактирования, получить его можно только, если использовать иконки TrueColor. Но и тогда для получения более-менее приемлемого результата ручное вмешательство потребуется, и для этого созданную нами программу стоит превратить в нормальный редактор иконок. Это теперь несложно, причем с реализацией встречающейся достаточно редко функции превращения в иконку произвольного изображения. Читатель уже вполне может самостоятельно с этим справиться.

    Для того чтобы переделать иконку окончательно, поставим еще одну кнопку Buttons (Icon) и напишем такой обработчик:

    Icolco.Destroy; (будем создавать заново)

    (ChangeFileExt(OpenDialogl.filename,’.ico’)); (выводим иконку на экран)

    Для того чтобы завершить тему создания иконок, нужно ответить на вопрос — как реализовать «прозрачный» цвет? Так как мы имеем все маски, то проще всего сделать это вручную, преобразованием пикселов. Мы покажем процедуру опять же на примере автоматического преобразования — попробуем осуществить замену заданного цвета на «прозрачный».

    Чтобы не возиться с CoiorBox или другими вариантами «цветовых» компонентов в этой пародии на настоящее приложение, которое мы создаем, для задания цвета поставим на форму компонент CoiorDialog и только заменим у него свойство Color на ciwhite. Решение очень неаккуратное, но для нас здесь, как временное решение, сойдет— мы хотим лишь показать, как и что делать в соответствующей ситуации. Поставим на форму очередную кнопку Buttonio (Icon) и вот как будет выглядеть обработчик для нее:

    procedure TForml.ButtonlOClick(Sender: TObject); var x,у:integer;

    begin <прозрачный цвет) if ColorDialog1.Execute then begin for x:=0 to 31 do

    for y:=0 to 31 do

    if XORMask.Canvas.Pixels[x,y]= ColorDialogl.Color then

    XORMask.Canvas.Pixels[x,y]:=0; ANDMask.Canvas.Pixels[x,у]:=clWhite; end;

    Icolco.Destroy; <будем создавать заново>Icolco := TIcon.Create; Icolnfo.flcon := True; Icolnfo.xHotspot := 0; Icolnfo.yHotspot := 0; Icolnfo.hbmMasк ANDMask.Handle; Icolnfo.hbmColor := XORMask.Handle; Icolco.Handle : = Createiconindirect(Icolnfo); Icolco.SaveToFile(ChangeFileExt(OpenDialogl.filename, 1 .ico’)); Imagel.Picture.LoadFromFile(ChangeFileExt (OpenDialogl.filename, ‘.ico’));

    Чтобы понять, что именно тут делается, обратитесь к описанию принципа совместной работы масок AND и XOR ранее. Осталось только показать, как лихо можно подменить иконку самого приложения прямо на ходу. Поставим на форму последнюю кнопку Buttonli (USE). Обработчик будет состоять всего из одной строки:

    procedure TForml.ButtonllClick(Sender: TObject); begin

    После нажатия на кнопку USE текущая иконка, которая содержится в icolco, сразу появится в заголовке формы.

    Заметки на полях

    Читатель вправе задать вопрос — а почему для задания «прозрачного» цвета нельзя воспользоваться удобным механизмом, который предлагают свойства TransparentColor и TransparentMode класса TBitMap? Дело В том, что они работают только при отображении BitMap на экране и никак не сказываются на представлении карты битов в памяти, т. е. при сохрвнении в файл, копировании в другой BitMap или переносе в иконку эти свойстве «пропадают». Попробуйте внести в самую первую процедуру по нажатию But сот следующие строки (их нвдо вставить непосредственно перед звгрузкой квртинки в imagei операцией Assign):

    При загрузке женского портрета белый фон станет «прозрачным» (выглядеть это будет довольно неаккуратно, т. к. отдельные области фона, нв первый взгляд тоже белые, на самом деле таковыми не являются). Но уже на третьем шаге (при переводе в размер 32×32) прозрачность «кудв-то» исчезнет. Звметим, что отсутствие функции указания диапазона цветов сильно ограничивает возможности механизма, фвктически он применим только к картинкам с однородными по цвету полями (даже логотип Apple из-за нвличия теней не будет отобрвжать- ся как надо). Если вы хотите отображать с эффектом прозрачности произвольные картинки с широкой гвммой цветов, то вам либо придется кропотливо заменять нужные цвете (например, все светлые) на какой-то один, который потом объявляется «прозрачным», либо не миновать «ручной» процедуры создания масок по типу, квк мы это делали для иконки. Создавать саму иконку, конечно, не нужно, маски AND и XOR (произвольного размера) комбинируются с фоном также вручную с использованием функции API BitBit или даже проще — путем задвния свойства CopyMode при использовании процедуры CopyRect.

    Дадим здесь и пару советов, как прввильно пользоваться механизмом отображения «прозрачных» BitMap. Вопреки распространенному мнению, если вы задаете свой собственный цвет, который должен стать прозрачным, параметр TransparentMode специально устанавливать в значение rnrixed не надо — это происходит автоматически при установке свойства TransparentCoior. Единственное, когда требуется установка TransparentMode — когда вы отказываетесь от собственного цвета, вы звдаете свойству знвчение tmAuto, и цвет будет определяться левым нижним пикселом изображения (именно нижним, хотя в фирменной справке все запутали, указав на два возможных варианта — в Windows, как мы знвем, формат BMP начинается с нижней строки). В этом случае, нвоборот, устанавливать свойство TransparentCoior уже нельзя. Кроме этого, чтобы отображение «прозрачного» цвета прошло успешно, надо не эа- быввть устанавливать свойство Transparent соответствующего компонента в True (у нас это Imagei).

    Если стоит задача изменить готовую иконку, то ее надо загрузить из файла, как мы делали раньше. Получить доступ к маске XOR можно также описанным ранее способом через процедуру Draw канвы любого BitMap, а вот с AND-маской придется повозиться. Сначала нужно получить структуру

    Icolnfo : TIconlnfo; Icolco : TIcon;

    В результате в icoinfo окажется структура icon info нашей иконки, а в ней, как мы уже знаем, содержатся дескрипторы масок под названиями tibmMe.sk (маска AND) и hbmcolor (маска XOR). Далее необходимо извлечь информацию ПО НУЖНОМУ Дескриптору, причем ПрОСТО Приравнять Bmplm. Handle: = icoinfo.hbmMssk не выйдет, надо действовать через глобальную кучу. Так что в самом простом случае при изменениях готовой иконки проще будет сформировать AND-маску заново— кажется, именно так и поступал Image Editor старых версий Delphi.

    В целом наша программа, как готовое приложение, разумеется, никуда не годится — если сразу после запуска случайно нажать на любую из кнопок, кроме Load, получите кучу претензий за обращение к несуществующим объектам. Но мы ее здесь создавали только в качестве иллюстрации того, как вообще надо обращаться с иконками и BitMap.

    Источник: Ревнч Ю. В. Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

    AveIconifier2 – простой конвертер картинок в формат ICO

    AveIconifier2 – простой бесплатный конвертер для преобразования популярных графических форматов в формат *.ICO.

    Как пользоваться конвертером в ICO

    Просто перетащите любой графический файл или несколько (поддерживает пакетное конвертирование) в окошко «Drop a PNG file here», и после конвертирования со второго окошка мышкой перетащите полученные иконки в папку на компьютере.

    Особенности программы AveIconifier2

    Программа понимает множество графических форматов (JPEG, PNG, BMP, TIFF, ICO, GIF). Может работать в обратную сторону, тоисть конвертировать из *.ico в *.png.

    Хоть программа и работает со многими форматами, желательно использовать картинки в формате *.png и с прозрачной подложкой.

    По умолчанию, картинки сохраняются с размерами 128х128 px.. Нажав левой клавишей мыши на окошке с выходным файлом, можно выбрать меньший размер.

    Поддерживает несколько тем оформления, которые прописываются в файле, необходимо поменять 2 раза название скина, в 7 и девятой строчках.

    Внимание! Если программа при попытке запуска выдает ошибку, попробуйте запустить ее в режиме совместимости с Windows XP.

    BMP to ICO

    Convert BMP to ICO — online and free — this page also contains information on the BMP and ICO file extensions.

    How to convert a BMP to a ICO file?

    1. Choose the BMP file that you want to convert.
    2. Select ICO as the the format you want to convert your BMP file to.
    3. Click «Convert» to convert your BMP file.

    Zamzar Pro Tip: You can use MS Paint or most standard Image programs to open BMP files. If you own a Mac then you could use Mac Preview.

    Drag & drop files, or select link

    Or choose a different format

    (And agree to our Terms)

    Email when done?

    Drop your files to convert them

    We’ll get right on it

    Files to Convert

    Overall conversion/upload progress:

    File Size File extension .bmp
    Category Image File
    Description BMP is a standard image file format which was historically used by computers running the Windows operating system. The format is more commonly know as Bitmap files. The term bitmap was originally coined in computer programming to refer to a map of bits. Historically when you saved an image on your home PC you might have saved it as a .bhp file, this is becoming less common with .jpeg the preferred image file format with the advent of digital cameras.
    Actions BMP to ICO — Convert file now
    View other image file formats
    Technical Details Bitmap files are housed in a device-independent bitmap (DIB) format. The term device independent means that the bitmap specifies pixel color in a form independent of the method used by a display to represent color. This enables Windows to show the bitmap on any type of display device — such as your monitor.
    Associated programs Adobe Photoshop
    MS Paint
    Microsoft Photo Editor
    Paintbrush
    Developed by Microsoft
    MIME type Image/x-ms-bmp
    Useful links More detailed information on BMP files
    What programs can I use to open a BMP file ?
    Convert BMP file
    Илон Маск рекомендует:  Что такое код getclassinfo
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL