Je cherche sans succès depuis un moment un logiciel libre me permettant de créer des icones multi-résolution pour Windows.

Je me suis donc décidé à écrire en Delphi, un petit outils pour réaliser cette tâche bien précise : créer un fichier .ico contenant toute les résolutions et profondeurs nécessaires à partir d’une image quelconque. Dés que le développement sera finalisé, je l’annoncerai ici.

Pour me simplifier la tâche j’utilise le génial ImageMagick qui dispose d’un moteur accessible en OLE Automation. La difficulté consiste à créer un SafeArray contenant les différents paramètres à passer à ImageMagickObject.

Voici un extrait du code permettant de réaliser ça :

procedure TFormMain.Convert( ImgSource, ImgDest:TImage; SizeX, SizeY : Integer;PixelFormat: TPixelFormat); var SrcName, DestName : String; sa_cmdline : Variant; Params : PSafeArray; StrList : TStringList; i : Integer; begin StrList := TStringList.Create; SrcName := ExtractFilePath(Application.ExeName)+‘tmp.bmp’; DestName := Format(ExtractFilePath(Application.ExeName)+‘tmpdest%d_%d.bmp’,[SizeX,ord(PixelFormat)]); ImgSource.Picture.SaveToFile(SrcName); StrList.Add('-geometry'); StrList.Add(Format('%dx%d',[Sizex,SizeY])); Case PixelFormat of pf1bit : begin StrList.Add('-monochrome'); StrList.Add('-dither'); end; pf4bit : begin StrList.Add('-colors'); StrList.Add('-16'); StrList.Add('-dither'); end; pf8bit : begin StrList.Add('-colors'); StrList.Add('-256'); StrList.Add('-dither'); end; pf16bit : begin StrList.Add('-colors'); StrList.Add('-65536'); end; end; StrList.Add(SrcName); StrList.Add(DestName); sa_cmdline := VarArrayCreate([0,StrList.Count-1], varVariant); for i := 0 to StrList.Count-1 do sa_cmdline[i]:=StrList[i]; Params := PSafeArray(TVarData(sa_cmdline).VArray); MagickImage1.Convert(Params); ImgDest.Picture.LoadFromFile(DestName); StrList.Free; end;