PJBlog : Pierre-Jean, WinLibre et Cie...

Pierre-Jean Coudert - Logiciels Libres - Développement - etc...

Aller au contenu | Aller au menu | Aller à la recherche

jeudi, août 10 2006

Les Turbos sont de retour

DevCo, la société qui préside maintenant aux destinées de Delphi, annonce des versions "Turbo" pour Delphi, comme à la grande époque du Turbo Pascal de Borland.

Plus de détails sur le blog de Marco Cantu.

mardi, octobre 12 2004

ImageMagickObject, Delphi, Icon, SafeArray

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;