http://qs321.pair.com?node_id=606014


in reply to Re: Merge multiple BMP images into ICO files
in thread Merge multiple BMP images into ICO files

Hi

Thanks for the suggestion. Imager looked quite promising, but it seems to do its .ico processing using a XS backend .dll that I won't be able to use on other OSs.

Unfortunately I think I need a pure-Perl solution.

- j

Replies are listed 'Best First'.
Re^3: Merge multiple BMP images into ICO files
by 5mi11er (Deacon) on Mar 22, 2007 at 14:20 UTC
    I think you're incorrect about needing a .dll file. I've used imager on a few linux boxes, and though I've never needed to do much with .ico files, I've been more than pleased with having chosen that package to work with.

    -Scott

      Hi

      I based that comment on seeing the following pulled down from ActiveState PPM:

      Installing C:\Progra~1\Perl\Perl586_811\site\lib\auto\Imager\File\ICO\ +ICO.dll
      So at least for the .ico support, it seems to need a .dll.

      Thanks, J

        Large parts of Imager are written in XS, which is mostly C with some Perl macros. On Win32, XS gets compiled into .dll files. On other platforms, it gets compiled into whatever format dynamically loadable libraries have. You can find out the filename extension for a platform by inspecting the output of perl -V:so on that platform:

        Win32:

        Q:\>perl -V:so so='dll';

        Solaris:

        $ perl -V:so so='so';

        The ICO.dll (or ICO.so, or ICO.bundle) is created during the build process. All of the code Imager requires to support ICO is part of Imager (most of the format support is in ICO/msicon.c).

        The structure of images inside an ICO file is similar enough to BMP that you could probably write a simple script (or module) to do the conversion. One issue is that .ico doesn't allow compressed images, but you could test for that, since you need to parse the bmp header for the image size anyway.

        No, XS means C code; see Corion's reply below.