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

5 минут на чтение

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

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

procedure TForm1.Button1Click(Sender: TObject);
var
 Ico:TIcon;
 bmp:TBitmap;
begin
   try
    Ico:=TIcon.Create;
    bmp:=TBitmap.Create;
    Ico.LoadFromFile('100137.ico');
    bmp.Width:=ico.Width;
    bmp.Height:=Ico.Height;
    bmp.Canvas.Draw(0,0,Ico);
    bmp.SaveToFile('1.bmp');
    FreeAndNil(bmp);
    FreeAndNil(Ico);
   except
    on e:Exception do
     //-//-//-//-//-//
   end;
end;
А те кто играют в игры от Alawar, придется скачать генератор ключей для игр Alawar, совершенно бесплатно

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

procedure TForm1.Button2Click(Sender: TObject);
var
  Bmp: TBitmap;
  Icon: TIcon;
  ImageList: TImageList;
begin
  Bmp  := TBitmap.Create;
  Icon := TIcon.Create;
  try
    Bmp.LoadFromFile('1.bmp');
    ImageList := TImageList.CreateSize(Bmp.Width, Bmp.Height);
    try
      ImageList.AddMasked(Bmp, Bmp.TransparentColor);
      ImageList.GetIcon(0, Icon);
      Icon.SaveToFile('1.ico');
    finally
      ImageList.Free;
    end;
  finally
    Bmp.Free;
    Icon.Free;
  end;
end;

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

procedure TForm1.Button3Click(Sender: TObject);
var
  Bmp: TBitmap;
  Icon: TIcon;
  ImageList: TImageList;
begin
  Bmp  := TBitmap.Create;
  Icon := TIcon.Create;
  try
    icon.LoadFromFile('1.ico');
    ImageList := TImageList.CreateSize(Icon.Width, Icon.Height);
    try
      ImageList.AddIcon(icon);
      ImageList.GetBitmap(0,bmp);
      bmp.SaveToFile('2.bmp');
    finally
      ImageList.Free;
    end;
  finally
    Bmp.Free;
    Icon.Free;
  end;
end;

Ну что вот еще с одним преобразованием графических форматов мы разобрались, полный исходник статьи можно скачать тут

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

В прошлой статье по преобразованию графических форматов — мы рассмотрели как можно преобразовать JPEG в Bitmap и наоборот. В этой статье также хотел рассмотреть преобразование графических форматов, но уже других, также довольно популярных, которые также можно ...
В этот раз хотел поговорить о том, как можно конвертировать изображения из одного формата в другой. На данный момент я остановился на JPEG в Bitmap и наоборот. Тут ничего по сути сложного нету, просто мне например данная задача пригодилась для пакетного конвер...
Всем привет. Что-то в последнее время я начал все больше работать с изображениями и компонентом TStringGrid. На этот раз, я захотел попробовать сделать фотогалерею из TStringGrid, используя иконки: bmp, ico (и их названиями), но для начала, я напишу о том, как...