WindowsCodecs
windowscodecs.dll is a library that works with image data in various forms. It is included in Windows Vista and .NET 3.0. It is highly extensible, and it also ships with windowscodecsext.dll (for N-channel pixel formats) and wmphoto.dll (for WMP format).
In Wine, we use WindowsCodecs as a central location for image file decoding and encoding.
The WindowsCodecs shipped with Wine is just good enough to load and save a few file formats.
TODO
Image Decoding
Not all TIFF files can be decoded. See ftp://ftp.remotesensing.org/pub/libtiff/pics-3.8.0.tar.gz or the newest pics from libtiff. You can use imagetest.exe from http://code.google.com/p/winezeug/source/browse/trunk/appinstall/tools/imagetest/imagetest.exe to test them.
- WMP files cannot be decoded (requires wmphoto.dll). Unfortunately, there seem to be no open-source libraries that can do this, and the format itself seems encumbered. Fortunately, no programs appear to need this.
- Metadata is ignored.
Image Encoding
- JPEG and GIF files cannot be encoded.
- All existing encoders ignore palettes.
- WMP files cannot be encoded (requires wmphoto.dll).
Metadata is ignored. See WindowsCodecs/Metadata
Encoder options are ignored. We need a real implementation of IPropertyBag2 (see the IWICComponentFactory::CreateEncoderPropertyBag method) before we can even advertise encoder options.
IWICStream
- InitializeFromIStream is unimplemented.
- The native implementation of IWICStream is very crippled. Generally only Stat, Read, Write, and Seek are implemented. Clones of IWICStreams can only be created using InitializeFromIStream (or InitializeFromIStreamRegion), which provides an independent cursor in a thread-unsafe way. The upshot is that we have to be very careful about how we use streams in WIC code and ensure that only one thread will access a given stream at a time.
Format Conversion
- Most formats can convert to 32bppBGR, 32bppBGRA, and 32bppPBGRA, but that's about it.
- We're maybe not as smart as we could be in WICConvertBitmapSource when there is more than one format converter available. Currently, there isn't, so this doesn't matter much.
Palettes
- IWICPalette objects cannot be initialized from images, constant palettes, or other IWICPalette objects.
General
- There are no ole proxies or stubs.
- Lots of components are still not implemented at all.
IWICImagingFactory_CreateDecoderFromStream ignores the vendor guid. This could cause a problem if we ever have two decoders that can handle one format.
Related DLLs
