![]() ![]() |
The following is a brief list of new (),
obsolete (
) and
changed (
)
functionality as well as bug fixes (
) made in
TGIFImage since version 2.0.
The list only includes high level changes that might affect end-users. For a
complete list of modifications, see the revision history.
If you are upgrading from a version prior to version 2.0, you can also read the
list of version 2.0 changes and
version 1.5 changes.
![]() |
||
![]() |
Import of bitmaps with more than 256 colors. It is now possible to convert bitmaps with more than 256 colors to GIFs. TGIFImage supports several reduction methods and palettes to decrease a bitmap's color depth. The reduction method and palette is controlled by the new ColorReduction and DitherMode properties. The default value of these properties can be set with the global GIFImageDefaultColorReduction and GIFImageDefaultDitherMode variables. |
|
![]() |
LZW-less compression. It is now possible to produce GIFs that uses RLE (Run Length Encoding) compression instead of the patented LZW compression method. You can choose between RLE and LZW compression with the new Compression property. The default value of the property can be set with the global GIFImageDefaultCompression variable. RLE doesn't compress as good as LZW, so RLE compressed GIFs are larger than LZW compressed ones. The good news is that RLE compressed GIFs are completely compatible with LZW compressed ones, so all software that can read LZW compressed GIFs, can also read RLE compressed GIFs. I'm not a lawyer (as you might have guessed), but it is my opinion that you won't need a LZW license if you use the RLE method to write GIFs. |
|
![]() |
Support for Delphi 4. TGIFImage now supports all 32 bit versions of Delphi and C++ Builder 3. |
|
![]() |
5 new demo applications. In addition to the new demos, most of the existing demo applications has been modified to use the the new features. |
|
![]() |
Fixed bug with Delphi 2 and 24 bit displays. pf24bit has been excluded from SupportedPixelformats in order to fix this problem. |
|
![]() |
Added work around for optimizer bug in Delphi 4 and C++ Builder 3. It is now possible to import bitmaps with Delphi 4 and C++ Builder 3. |
|
![]() |
Added work around for another Delphi 4 optimizer bug in InitializeBitmapInfoHeader. | |
![]() |
Added work around for race condition bug in Delphi 4's TThread. When resizing a TImage containing an animated GIF, the application would often hang. |
|
![]() |
The lzw_patent.txt file has been removed from the kit. The file has been removed since it was incomplete. Instead, the complete text of the LZW patent can be found on the TGIFImage home page. |
|
![]() |
Tolerance against rxLib. TGIFImage can now load the stream format used by rxLib's TGIFImage. |
|
![]() |
Replaced the TBGR type with TRGBTriple. The TBGR type has been replaced with Delphi's TRGBTriple type. TRGBTriple is declared in windows.pas. |
|
![]() |
The threaded GIF renderer has been improved for Windows 95/98. The multi threaded GIF to bitmap renderer now uses a fixed pool of rendering threads. This improves performance slightly on Windows 95 and 98 since these "so called" operating systems can't schedule multiple threads properly. |
|
![]() |
||
![]() |
The OnProgress and OnChange properties are not copied when assigning
one TGIFImage to another. The OnProgress and OnChange events are instead triggered on the source TGIFImage of the Assign. |
|
![]() |
New option: goClearOnLoop. Setting this option will cause the animation buffer to be cleared when the animation wraps. This is how Netscape Navigator behaves. |
|
![]() |
New option: goTile. Setting this option will display a GIF tiled instead of stretched. |
|
![]() |
New method: PaintRestart. Calling PaintRestart will cause the animation to restart from the first frame. |
|
![]() |
New property: AnimationSpeed. The speed of the animation can now adjusted by setting the AnimationSpeed property. The speed is specified as a percentage of the normal speed. The valid range is 0 to 1000. Specifying a value of 0 will halt the animation temporarily. The default value of AnimationSpeed can be set with the global GIFImageDefaultAnimationSpeed variable. |
|
![]() |
New property: ColorReduction. When importing bitmaps with more than 256 colors, this property specifies the method used to reduce color depth to 256 colors or less. Currently supported methods are: • rmNone: Do not perform color reduction. • rmWindows20: Reduce to the Windows 20 color system palette. • rmWindows256: Reduce to the Windows 256 color halftone palette. • rmWindowsGray: Reduce to the Windows 4 grayscale colors. • rmMonochrome: Reduce to a black/white monochrome palette. • rmGrayScale: Reduce to a uniform 256 shade grayscale palette. • rmNetscape: Reduce to the Netscape 216 color palette. • rmQuantize: Reduce to an optimal 2^n color palette using Octree color quantization. • rmQuantizeWindows: Reduce to an optimal 256 color windows palette using Octree color quantization. The default value of ColorReduction can be set with the global GIFImageDefaultColorReduction variable. |
|
![]() |
New property: ReductionBits. This property specifies the color depth when the rmQuantize reduction method is used. The valid range of ReductionBits is from 3 to 8 corresponding to 8, 16, 32, 64, 128 or 256 colors. The default value of ReductionBits can be set with the global GIFImageDefaultReductionBits variable. |
|
![]() |
New property: DitherMode. When importing bitmaps with more than 256 colors, this property specifies the method used to map the colors of the source image to the reduced palette. Currently supported methods are: • dmNearest: Map colors using a simple nearest color algorithm. • dmFloydSteinberg: Map colors using Floyd Steinberg error diffusion. The default value of ColorReduction can be set with the global GIFImageDefaultDitherMode variable. |
|
![]() |
New property: Compression. Used to specify the compression method used when saving GIFs. These are the possible values: • gcLZW: Normal LZW compression. • gcRLE: GIF compatible RLE compression. The default value of Compression can be set with the global GIFImageDefaultCompression variable. |
|
![]() |
Added check for nil source in TGIFImage.Assign. Assigning nil to a TGIFImage is now handled safely. |
|
![]() |
Added support for meta files and icons. The Assign method now supports import of meta files (TMetaFile) and Icons (TIcon). Neither types are imported as transparent GIFs though. |
|
![]() |
New method: OptimizeColorMap. OptimizeColorMap merges and optimizes multiple local color maps into a single global color map. This is a commonly used method to reduce the size of animated GIFs. |
|
![]() |
||
![]() |
TGIFSubImage.Assign(TGIFSubImage) has been optimized. Copying one GIF to another is now very fast. |
|
![]() |
A bug in TGIFSubImage.Decompress has been fixed. Interlaced images with a height divisible by 4 but not divisible by 8 would cause a memory overwrite that resulted in some very nasty AVs. |
|
![]() |
Fixed bug in TGIFSubImage.DoGetXXXBitmap. GIFs containing images with a height of 1 would produce an "Invalid ScanLine Index" exception under Delphi 2. |
|
![]() |
Fixed integer overflow bug in Progress events. It is now possible to load and display GIFs larger than 20Mb (yes, that's MEGA bytes), provided you have a large enough swap file. Oh by the way, don't try it on Windows 95/98. TGIFImage can handle these large GIFs, but Windows 95/98 can't. |
|
![]() |
||
![]() |
New property: AnimationSpeed. The speed of the animation can now adjusted by setting the AnimationSpeed property. The speed is specified as a percentage of the normal speed. The valid range is 0 to 1000. Specifying a value of 0 will halt the animation temporarily. The speed is specified as a percentage of the normal speed. |
|
![]() |
The ActiveImage property is now writable. By modifying the value of the ActiveImage property, it is possible to alter the animation sequence in the OnStartPaint, OnPaint and OnLoop event handlers. |