Delphi Graphics: File Formats & Conversions

A. File Formats B. File Format Conversions C. Image Compression D. Other File Format Resources

For technical information about graphics file format specifications, search www.wotsit.org 


A.  File Formats
Also see Section E of the (Non-Delphi) Graphics Page

Wotsit's Format

Graphics File Formats FAQ Home Page

File Format

Description/Comments

general info The RegisterFileFormat method of  TPicture allows preview in the TOpenPictureDialog.   See the SLD example in the file TSlide.ZIP by Stephan Haugh from England.  (D3/D4/D5).  This approach was based on work by Colin Sarsfield's TDxf (dxfgrph.zip).

File format information on hundreds of different file types and all sorts of other useful programming information; algorithms, source code, specifications, etc.
www.wotsit.org

File Format Encyclopedia, Release 2.0 (by Salvatore Meschini)
70 file formats explained in the GRAPH.SWG file
ftp://ftp.gdsoft.com/pub/swag/ffe200.zip (Requires SWAG Reader)

In Association with Amazon.com
3DS 3D Studio import library for Delphi 2-4
www.lischke-online.de/3DS.html
411 Screen411toBMP.JPG (6474 bytes)
efg's 411 Lab Report to read .411 file and convert to a TBitmap
ANI Animated Cursors in Neil Rubenking's PC Magazine (1 Nov 1999) Delphi utility CursorDance

Neil Rubenking's AniCurFromResource in the AllFuncs.pas unit of his ColorClue utility.

AVI

TAVIWriter.  A non-visual component to create AVI files. Allows a single video stream created from an unlimited number of bitmaps, and a single audio stream from a WAV file. (By Elliott Shevin). 

Find several AVI components on Torry's page
  www.torry.net/video.htm 

Ken White's UseNet Post about imbedding an AVI in a resource file

"The Animate Control," pp. 40-44, Chapter 22 (online "bonus" chapter) of  Mastering Delphi 5 by Marco Cantý.

Toni Martir's notes and complete VFW example (see ShevinE's improvement below).   (Note:  to get Toni's complete example to compile in D3-D5, make sure you can compile with USES OLE2:

Tools | Environment Options | Library | Library Path
D3: C:\Program Files\Borland\Delphi 3\Lib\Delphi2
D4-5: $(DELPHI)\Lib\Delphi2)

Die Ansteuerung von Videokarten mit AVI-Capture unter Delphi
http://delphi.pjh2.de/articles/multimedia/avicap.php

Use Lizard.AVI or another AVI file with Toni's example.

efg's Resource Demo application shows how to use the following file types in resource files:  BMP, ICO, JPG, GIF (requires Anders Melander's TGIFImage), EMF, TXT, AVI, WAV and cursors

Elliott Shevin's improvements to Toni Martir's example (D3-D5 source).   Saves AVI to  BMP files as FrameXX.BMP.  Includes VFW.PAS file used in Toni's example.  (Requires USES OLE2 -- see above notes for details.)  [Use Lizard.AVI or another AVI file.].  Elliott Shevin's TAVIWriter is a non-visual component to create AVI files. 

Nelson Chu's code snippets about saving compressed AVI.

Displaying seconds, minutes, tracks of an AVI (FAQ 2083D)
Displaying the first frame of an AVI file (FAQ 866D)
Endless looping with the TMediaPlayer (FAQ 2071D)
Frame count of an AVI (FAQ 2075D)
How can I capture an image from a video source (FAQ 1037D)
Play an AVI file that has sound, silently (FAQ 1918D)
Show a AVI clip in full screen zoom mode (FAQ 1914D)
Storing and Playing an AVI in a database (FAQ 1181D)
Using an AVI file with TAnimate (FAQ 2366D)

The Resource-Grabber will scan the directories and drives on your computer and extract all Bitmaps, Glyphs (button images), Icons, Cursors, JPG/JPEG images, WAVE and RMI sound files as well as AVI video clips it finds inside the programs and DLL files in any directory of your choice.  http://inner-smile.com/dl_res.htm

See Video Capture in Delphi by G. L. Alston. www.undu.com/DN970501/00000024.htm for info about AVICAP.DLL.

Also see "How can I capture an image from a video source" (FAQ 1037D).

TtvAPIThing, a component that encapsulates many of the API calls
http://delphi.icm.edu.pl/ftp/d40free/apithing.zip

Die Ansteuerung von Videokarten mit AVI-Capture unter Delphi
http://delphi.pjh2.de/articles/multimedia/avicap.php

Eddie Shipman's UseNet Post about how to extract 8 AVI's from Shell32.DLL

Non-Delphi:

AVI Overview
www.jmcgowan.com/avi.html 

VB Info:  AVI Tutorial -- VB Programmer's AVIFile Function Help Pages
www.shrinkwrapvb.com/avihelp/avihelp.htm 

BLOB Binary Large OBject:

Streaming Bitmaps and Other Binary Data to BLOB Fields
http://community.borland.com/article/0,1410,27462,00.html 

JPG in Database
www.elists.org/pipermail/delphi-db/2002-June/005872.html
 

Bob Villiers' Usenet Post1 and Post2 about how to load jpeg in file to blob field using SQL 

Bob Villiers' examples of copying JPEG in BLOB to clipboard, and JPEG file on clipboard to BLOB.  A separate demo shows how to store a user-defined image format (CF_JPEG) and  a predefined image format (DIB) simultaneously into the clipboard.

Bitmaps And InterBase BLOB Fields (TI 797D)
Copying a information from one memo field to another using TBlobStream (FAQ 2422D)
Extracting A Bitmap From A BLOB Field (TI 791D)
Loading Bitmaps Into dBASE And Paradox BLOB Fields (TI 779D)
Save and load metafiles in a BLOB field with using DBImage (FAQ 878D)

Mike Shkolnik's UseNet Post about converting BLOB to TPicture
Steve Koterski's UseNet Post about putting bitmaps into a dbase BLOB field
Steve Koterski's UseNet Post with TDBImage explanation and how to handle JPEG.

John Herbster's JPEG / BLOB example that stores images from JPEG files into Paradox table BLOB field.

BMP TBitmap, BMP, DIB page

Bitmap Archives

CMP See Lead Tools
CUR Common sources of .CUR files:
-  ..\Windows\Cursors
-  ..\Program Files\Borland\Delphi n\Images\Cursors  (D3 and before)
-  ..\Program Files\Common Files\Borland Shared\Images\Cursors (D4 and later)
-  ..\BC5\Include\MFC\RES
-  ..\Program Files\Plus!\Themes    (from Win 95 "Plus" disk)

See TCursor information on VCLRTL page

How to Create BMP files for Standard Cursors
see  Cursors on efg's Delphi Graphics Algorithm page

efg's Overlay Cursor Lab Report.  Shows how to convert CUR to TBitmap and overlay cursor transparently on another bitmap.

Icon, Cursor, and Caret Functions, Tomes Graphical, pp. 357-402

How to create an animated cursor with a wagging tail. The example is ready to go, source included.  www.ec-software.com/delphi/ntcurs32.zip

CopyCursor (FAQ 1067D)
How to use a custom cursor (TI 956D)
Loading a Custom Cursor from a RES file (TI1075D)
Loading Bitmaps and Cursors from RES files (TI 1081D)
Using an animated cursor (FAQ 580D)

Eddie Shipman's UseNet Post about making a rainbow background on a form (see procedures CursorOff and CursorOn)

Linking an animated cursor to a resource file (FAQ 2841D)
Kerstin Thaler's UseNet Post about how to load an animated cursor

Ray Lischner's UseNet Post about a better way to restore cursors automatically

Thomas' UseNet Post about how to extract the cursor image from a cursor file for drawing on a bitmap

Microangelo 98
Suite of utilities that provides tools for working with the icons, cursors and animated cursors.
www.impactsoft.com/muangelo/muangelo.html

Loading Cursors from a Resource File. efg's CustomCursor.TXT

Also see ANI files.

Cursor Archives

Windows 98:  C:\Windows\Cursors 
Windows 2000:  C:\WINNT\Cursors

DIB TBitmap, BMP, DIB page
DICOM

ezDICOM is an open source Analyze, DICOM, Genesis, Interfile and NEMA format image viewer written primarily by Wolfgang Krug and Chris Rorden. This software will allow you to view many medical images. Both the fully functioning program and the Delphi (an object-oriented variant of Pascal) source are available for download.  
www.psychology.nottingham.ac.uk/staff/cr1/dicom.html 
www.psychology.nottingham.ac.uk/staff/Chris.Rorden/dicom.html 
http://delphi.icm.edu.pl/ftp/d20free/ezdicom.zip

Digital Imaging and Communications in Medicine.  Basic viewer from Delphi Super Page:
http://delphi.icm.edu.pl/ftp/d10free/dicom10.zip
http://delphi.icm.edu.pl/ftp/d20free/dicomsrc.zip

ImageLib DICOM is a VCL written for Delphi and is royalty free.   DICOM  is the medical imaging format recently approved by the  FDA.  (somewhat expensive)
www.imagelib.com

Non-Delphi DICOM Links on Medical Applications page

DXF

Descendant of TGraphic, TDxf for loading and viewing .DXF files exported from AutoCAD.  dxfgrph.zip contributed by Colin Sarsfield

AutoCAD DXF file reader/writer/viewer. Supports most of the common DXF entities.   POINT, LINE, INSERT(ATTRIB), TEXT, 3DFACE, CIRCLE, ARC, POLYLINE(+mesh varieties), SOLID, ATTDEF. BLOCKs supported and 3D transformations implemented.
http://delphi.icm.edu.pl/ftp/d20free/dxf_3_0.zip

CADSys4:  http://members.tripod.it/vpiero/cadsys40.htm

DXF Specification:  www.autodesk.com/techpubs/autocad/acad2000/dxf 

OpenDWG is a consortium of companies that work together to reverse engineer the DWG file format, and provide libraries, code, and specifications for the DXF and DWG file formats.  www.opendwg.org 

EMF / WMF EMF:  Enhanced Metafile (Win32)
WMF:  Windows Metafile (Windows 3.1).

Bitmap and Metafile Functions, Tomes Graphical, pp. 273-356

L'aperÁu avant impression
www.developpez.com/upload/alphomega/imprimer/Imprimer4.htm 

"Using Metafiles," pp. 68-70, Chapter 22 (online "bonus" chapter) of  Mastering Delphi 5 by Marco Cantý.

Delphi 3/4/5: ..\Demos\Imagview

"Creating a metafile," pp. 316-320, Delphi Programming Problem Solver, Neil Rubenking.
"Creating an enhanced metafile," pp. 320-322, Delphi Programming Problem Solver, Neil Rubenking.

Determining if a canvas is a Metafile Canvas?  (FAQ 2638D)
How can I place a bitmap in a Metafile? (FAQ 1842D)
Metafile fonts and the VCL (FAQ 2952D)
Save and load metafiles in a BLOB field with using DBImage (FAQ 878D)

Borland's weak answer:  Text in Windows Metafiles (FAQ 1550D)
Boris Novgorodov's UseNet Post about text in metafile

Joe Hecht's UseNet Post about how to access single object in a metafile

Rotating a Metafile (FAQ 1655D) [Borland needs a better, more-detailed answer than this FAQ].  Freddy Darsonville's E-Mail about a code starting point for rotation of a metafile

VR Meta 1.23 is a descendant of TMetafile that provides a Canvas property for you to draw on using Delphi and WinAPI commands. Additional methods and properties open up the world of Metafiles for your applications.  www.programmersheaven.com/zone2/cat71/5849.htm 

Drawing Windows Metafiles in Delphi by Grahame S. Marsh http://www.undu.com/DN960223/00000006.htm

Supported by ImageLib www.imagelib.com

Greg Bullock's 13 Nov 98 post to borland.public.delphi. graphics about WMF/EMF scaling:
"I haven't confirmed that this works with TChart metafiles, but in Windows, a pen width of 0 means 'as thin a possible' or 'one pixel wide.'  So I would think any lines that have a pen width of 0 will no change width as a metafile is scaled, and anything with a nonzero width will.  Of course, this also means that the non-scaling lines will always be as thin a possible, but maybe this isn't so bad?"  Rob Schuff  confirmed this worked in his response to the above post.

Non-Delphi:

MS Q156696:  EMF Playback into DC Causes Memory Leak in GDI
http://support.microsoft.com/support/kb/articles/Q156/6/96.asp 

Windows Metafiles:  a guide for non-windows programmers
www.csn.ul.ie/~caolan/publink/libwmf/libwmf/doc/index.html 

Microsoft Windows Metafile
www.csn.ul.ie/~caolan/publink/libwmf/libwmf/doc/ora-wmf.html 

EPS Encapsulated PostScript is a page description language used by imagesetters and some laser printers.
EXIF Iinformation stored in JPEGs on many digital cameras, including Kodak DC280, Nikon CoolPix 990.

dEXIF is a Delphi open source library for reading EXIF information from JPEG image files.  It is 100% Delphi, and VCL free.

  • dEXIF provides a fairly fast way to extract EXIF information  from JPEG image files.
  • dEXIF provides a simple way to extend manufacturer specific  information through the msData module.  Manufacturer information  is provided for Canon, Casio, Fuji, Nikon, and Olympus cameras.

http://mcguirez.homestead.com/downloads.html 

Non-Delphi: 

EXIF Utilities
http://www.users.bigpond.com/hughthomas/exif.html 

FIF Fractal Image Format from Iterated Systems, Inc. 
See Fractal Image Decoder for 32-bit Windows on the Delphi 3/4 CD: \INFO\EXTRAS\FIF and Test Program in INFO\EXTRAS\FIF\TEST.  In Delphi 5, FIF libraries are no longer available due to discontinued development and support by Iterated Systems.

Contents of FIF Info files distributed on CD with book Delphi Component Design See pp. 218-224 for definitions of TFIFData and TFIFImage classes.

FLC/FLI Movie Player

FLC animation example (molecule)
www.chem.swin.edu.au/test/flc.html

GIF TGIFImage by Anders Melander, Delphi 2, 3, 4 and 5 & Builder 3 and 4.
Anders' site has been offline for some time.  Find copies of TGIFImage and updated versions here http://finn.mobilixnet.dk/delphi.

Anders' UseNet Post about 24-bit bitmap to 256-color GIF

Finn Tolderlund's UseNet Post about using OnEndPaint to restart animated GIF

The first six bytes of a GIF file are 'GIF89a'.

TRxGIFAnimator in RxLib, Units GIFCtrl, RxGIF.
www.rxlib.com/index.html 

efg's Resource Demo application shows how to use the following file types in resource files:  BMP, ICO, JPG, GIF (requires Anders Melander's TGIFImage), EMF, TXT, AVI, WAV and cursors

Picture This on the Web:  A CGI Program to Deliver Database Pictures, Delphi Informant, Feb 1998

TGIFImage:
www.sulako.com/downloads.htm

Supported by ImageLib www.imagelib.com

Web Graphic Formats
http://community.borland.com/article/1,1410,20027,00.html

GIF and JPEG Components for Delphi
www.undu.com/Articles/990114a.html

SpecialGIF procedure by Robert Poyntz

Non-Delphi
Compuserve's Graphics Interchange Format uses Sperry-Univac's patentend LZW compression.  The LZW patent expired on June 20, 2003.  (The change in patent law in 1995 extended the patent by  about 6 months.)

GIF Links
gamani:  GIF Movie Gear:  www.gamani.com/gmgdown.htm

GIFShop, free GIFs, animated GIFs
http://gifshop.freeservers.com/main.html

GIF Archives

The Iconolog, collection of 7395 icons in GIF format
www.ozemail.com.au/~afactor/iconolog

Library of GIF animations
www.coolarchive.com/gifanimations.cfm

HP-GL/2 Partial implementation of the HP-GL/2 file viewer. Works with most of the HP-GL/2 files. Understands some HP RTL and PJL.
http://delphi.icm.edu.pl/ftp/d50free/hpgl2.zip
ICO Neil Rubenking's PickIconDlg in the AllFuncs.pas unit of his ColorClue utility.

Icon, Cursor, and Caret Functions, Tomes Graphical, pp. 357-402

Colin Wilson's UseNet Post explaining limitations of TIcon:  "if you want to manipulate icons in Delphi you've got to code it all yourself.  The VCL doesn't do what you want"

Harm's UseNet Post explaining how to create an icon from whatever graphic is in Image1 (not just a bitmap) and stores it in Image2

Bob Villiers' UseNet Post explaining how to store an icon on the clipboard

efg's Resource Demo application shows how to use the following file types in resource files:  BMP, ICO, JPG, GIF (requires Anders Melander's TGIFImage), EMF, TXT, AVI, WAV and cursors

Example of comparing two TIcons.

Creating a flashing icon (FAQ 1103D)
Creating a Win95 Shell icon application (FAQ 2911D)
Displaying an application associated icon (FAQ 1610D)
Displaying a file's associated icon (FAQ 2646D)
Extracting an icon from a .EXE or .DLL (FAQ 2458D)
Extracting icons (FAQ 1778D)
How do I create a bitmap from an icon?  (FAQ 2752D)
How do I create an icon from a bitmap?  (FAQ 2748D)
Incorrect Application Icon (FAQ 4438D)
Creating a resource only DLL (FAQ 1595D)
Storing icons in your application for use at runtime? (FAQ 2767D)
StretchDraw on an icon (FAQ 1818D)
Using an Icon as the Glyph in a TSpeedButton (FAQ 2122D)

efg's example efg's example of converting TIcon to TBitmap, as well as extracting the icon's "AND" bitmap mask and the "OR" color bitmap. 

"Choosing Icons" (using the PickIconDlg dialog box) in From the Shell:  Part I: Dialog Boxes Youíve Always Needed, Delphi Informant, April 1999

Icon-Browser. View a directory of icons.  Convert between BMP and ICO formats.
http://www.pics-software.de/swico.htm 

The Resource-Grabber will scan the directories and drives on your computer and extract all Bitmaps, Glyphs (button images), Icons, Cursors, JPG/JPEG images, WAVE and RMI sound files as well as AVI video clips it finds inside the programs and DLL files in any directory of your choice.  http://inner-smile.com/dl_res.htm

An Icon Extractor and Viewer
www.developers.demon.co.uk/iconex.html

Delphi 3 or 4: ..\Demos\Imagview

Microangelo 98
Suite of utilities that provides tools for working with the icons, cursors and animated cursors.
www.impactsoft.com/muangelo/muangelo.html

IconJack by Neil Rubenking in PC Magazine  
ftp://ftp.zdnet.com/pcmag/1995/0627/iconjack.zip

IconEdit32 by Neil Rubenking in PC Magazine
www.zdnet.com/pcmag/stories/solutions/0,8224,2444578,00.html

IconEdit by Michael J. Mefford in PC Magazine
www.zdnet.com/pcmag/pctech/content/16/12/ut1612.001.html

TIconList, Unit IcoList.PAS in RxLib
www.rxlib.com 

The Icon Editor and Library Manager for Windows
www.axialis.com/axicons/index.html 

Icon Archives

Glyphs und Icons im Internet
http://community.borland.com/article/0,1410,25911,00.html 

Icons from IBM
http://www-3.ibm.com/ibm/easy/eou_ext.nsf/Publish/648
 

Iconoweb
www.ozemail.com.au/~afactor/iconolog.html

Cool Archive (over 4000 icons in 125 categories)
www.coolarchive.com/icons.cfm

The Iconolog, collection of 22,963 ICOs that use the Windows 16-color palette
www.ozemail.com.au/~afactor/iconolog

The Icon Book:  Visual Symbols for Computer Systems and Documentation

IPTC Delphi example of extracting IPTC info from a JPEG file that has such information.

dIPTC can read, write, and generate IPTC jpeg data.  dIPTC   is part of the dEXIF library and as such is 100% Delphi,  VCL free, and open source. The latest version is available from  http://mcguirez.homestead.com/downloads.html

Non-Delphi:

Associated Press IPTC header codes:
http://www.ap.org/apserver/userguide/codes.htm

IPTC specifications are included with the Adobe Photoshop SDK
http://partners.adobe.com/asn/developer/gapsdk/PhotoshopSDK.html

JPEG, JPG

In Delphi 3/4/5, look for \Info\Extras\JPEG\Test and \Info\Extras\JPEG\Src on the CD ROM! Start with the Readme.Txt file in the root directory of the CD ROM.

Delphi 3 can load JPEGs at runtime through the TImage control. Just make sure "JPEG" is in one of your Uses clauses.   Delphi 3 can load JPG images at design time, if any design-time package includes the jpeg unit.  If you load a jpeg image into a TImage control at design time, you have to remember to add the JPEG unit to your project yourself, or your app won't be able to load the JPEG from the DFM at runtime. (Thanks to Danny Thorpe for this clarification.)

When you load a JPEG image into a control at design time  it writes it as a JPEG image stream.  Delphi 4 will automatically add the JPEG unit to your project when you save, if any control in the project refers to a TJPEGImage instance  (Thanks to Danny Thorpe for this clarification.)

The first two bytes of every JPEG file are $FFD8 and the last two bytes are $FFD9.

Bob Villiers' UseNet Post about X density, Y density, and dimensions

Example based on UseNet post by Peter Klein showing how to extract DPI directly from JPG file.

Chris Rorden's Delphi program that demonstrates three simple tasks:

  1. views a JPEG image
  2. reads the red values of a jpeg image and saves the raw data to disk. 
  3. a basic JPEG header reader that will describe the header contents of a JPEG file.

JPEG Error Messages:  0 to 119

efg's JPEGSentinelsAreOK function to find "bad" JPEGs (avoid error #52)

JPEG_IO.pas -- Replacing Delphi's JPEG Unit
You may have encountered problems when trying to write JPEG images between one and two megabytes in size. You can avoid these problems by using the Intel JPEG Library, and possibly gain a speed advantage as well.   David Taylor wrote this simple unit as a way of loading BMPs from JPEG files, and saving BMPs to JPEG files with the minimum of fuss. Following requests, I have now updated it to read the half, quarter and one eighth size scaling that are easy to do with JPEG images.
http://www.david-taylor.pwp.blueyonder.co.uk/software/components.html#JpegIO 
Requires Intel JPEG Library:  http://developer.intel.com/software/products/perflib/ijl/index.htm 

Bob Villiers observed in a UseNet Post that color JPEGs are always 24 bit and 8-bit JPEGs are black/white.  He also showed how to convert a color TBitmap to a jf8bit JPEG.

efg's Resource Demo application shows how to use the following file types in resource files:  BMP, ICO, JPG, GIF (requires Anders Melander's TGIFImage), EMF, TXT, AVI, WAV and cursors

How to print a JPEG displayed in a TImage

Chris Rorden's version of how to print a JPEG with these improvements:
1.) checks whether the image is taller or wider, and selects landscape or portrait to suit.
2.) checks the image aspect ratio versus the printer aspect ratio, to see whether height or width is the constraint on scaling.

JPG in Database
www.elists.org/pipermail/delphi-db/2002-June/005872.html
 

M.H. Avegaart's UseNet Post about how to resize a JPG (i.e., create Small.JPG from Big.JPG)

Charles Hacker's UseNet Post with routine to resize JPGs

Web Graphic Formats
http://community.borland.com/article/1,1410,20027,00.html

efg's Combine JPGs, split and display example.  Combine files 1.JPG, 2.JPG, 3.JPG into a single file.  Read the combined file and display the original JPGs in TImages.

For a Delphi 2 JPEG Component:
www.hoerstemeier.com/files/jpgimg.zip

Encryption / Decryption
 CryptImage.jpg (948 bytes)  efg's ImageCrypt Lab Report:  JPEG Section

Picture This on the Web:  A CGI Program to Deliver Database Pictures,
Delphi Informant, Feb 1998

Streaming Images from Web Applications:  Sending a JPEG image from the hard drive
http://community.borland.com/article/0,1410,20378,00.html 

efg's UseNet Post to convert TJPEGImage to TBitmap, change size of TBitmap, and convert back to TJPEGImage

"Interpreting Cryptic Jpeg Error Number's" by Corbin Dunn
http://community.borland.com/article/0,1410,20433,00.html
Corbin's UseNet Post with the same information.

Kay Schubert's UseNet Post about how to "Prevent JPEG Error 41" with code that saves and loads ALL TPicture-contained TGraphic descendents into and from a stream, without any need to know its actual type

According to David J. Taylor in a UseNet Posting "if you have Delphi 6, JPEG Error #36 should be fixed" (13 Aug 2002).

"How to avoid 'Random' Exceptions being raised when using TJPEGImage or the JPEG unit" by Corbin Dunn.  http://community.borland.com/article/0,1410,20073,00.html

JPGImg. Native VCL JPEG image based on the PasJPG Library (Delphi 1/2)
Delphi Super Page: http://delphi.icm.edu.pl/ftp/d10free/jpgimg.zip

Freeware component allows you to read, delete and edit comments inside the JPG files.
http://delphi.icm.edu.pl/ftp/d20free/jpgcom01.zip

Displaying a 24 bit True Color bitmap image on a 256 color display
FAQ 996D (novel use of JPG)

Peter Below's UseNet Post about no standard clipboard format for JPEGs

Extracting a JPEG Resource from an EXE (TI 4532D)
Installing JPEG Components that Ship with Delphi 3 (TI4531D)
Using JPEGs from resource files (FAQ 1822D)

Bob Villiers' examples of copying JPEG in BLOB to clipboard, and JPEG file on clipboard to BLOB.  A separate demo shows how to store a user-defined image format (CF_JPEG) and  a predefined image format (DIB) simultaneously to the clipboard.  Bob Villier's related UseNet Post about JPEGs on the clipboard.

John Herbster's JPEG / BLOB example that stores images from JPEG files into Paradox table BLOB field.

Using JPG's in Paradox Databases
www.delphi3000.com/articles/article_1315.asp 

Monty's UseNet Post about setting DPI in JPEG file
Peter Below's UseNet Post about using JPEGs with the Clipboard
Kay Schubert's UseNet Post about how to prevent "JPEG Error #41"
Harm's UseNet Post about using a JPG for Wallpaper
Steve Koterski's UseNet Post with TDBImage explanation of loading a JPEG
Steve Schafer's (Team B) UseNet Post about JPEG pixel density
Lemke's UseNet Post about how to load TJPEGImage and resave with new image quality
Jens Gruschel's UseNet Post about loading a JPEG from a stream

Trap exceptions.  Error #60 and #67 occurs when the JPEG is "incomplete."  Error #52 occurs when the file is not a JPEG (for example a GIF is being used as a JEPG).   Here's how to trap these errors:

USES JPEG;

procedure TForm1.Button1Click(Sender: TObject);
  VAR
    Picture: TPicture;
begin
  // Use polymorphic Picture since it will load all registered file types
  Picture := TPicture.Create;
  TRY
    TRY
      Picture.LoadFromFile('VeryBad.JPG');
    EXCEPT
      ON E: Exception DO ShowMessage('Very Bad JPEG: ' + E.Message)
    END;
    Image1.Picture := Picture
  FINALLY
    Picture.Free
  END
end;

Maintaining Aspect Ratio.  Displaying a TJPEGImage in a TImage with Stretch enabled can distort the image display.  Either set Stretch to FALSE, or adjust one of the dimensions of the TImage to display the image with the correct aspect ratio:

// Assume "Strech" is enabled in TImage.
USES JPEG;

procedure TForm1.Button1Click(Sender: TObject);
  VAR
    JPEGImage: TJPEGImage;
begin
  JPEGImage := TJPEGImage.Create;
  TRY
    JPEGImage.LoadFromFile('Fireworks.jpg');

    <FIX  ASPECT RATIO HERE>

    Image1.Picture.Graphic := JPEGImage
  FINALLY
    JPEGImage.Free
  END;
end;

Replace <FIX ASPECT RATIO HERE> with one of these two statements:

  // For given TImage Height, compute TImage Width
  //  to maintain aspect ratio of original JPEG image.
  Image1.Width := MulDiv(Image1.Height, JPEGImage.Width, JPEGImage.Height);
or
  // For given TImage Width, compute TImage Height
  //  to maintain aspect ratio of original JPEG image.
  Image1.Height := MulDiv(Image1.Width,  JPEGImage.Height, JPEGImage.Width);

Example of how to use JPGs in a database with D4.  
www.stg.com.br/soft/dbjpg.zip

GIF and JPEG Components for Delphi
www.undu.com/Articles/990114a.html

efg's BMPJPG Lab Report including graph of File Size vs. JPEG Quality

Non-Delphi JPEG Links

CRYX's note about the JPEG decoding algorithm
www.opennet.ru/docs/formats/jpeg.txt 

Image Compression:  JPEG
http://pascalzone.amirmelamed.co.il/Graphics/JPEG/JPEG.htm
 

PDF describing the JPEG format
www.w3.org/Graphics/JPEG/itu-t81.pdf 

JPEG fundamentals
http://murray.newcastle.edu.au/users/students/2000/c9425349/section3.htm 

JPEG-2000 Non-Delphi:  
Jasper Project:   The objective of this project is to develop a software-based reference implementation of the codec specified in the JPEG-2000 Part-1 standard (i.e., ISO/IEC 15444-1).
www.ece.ubc.ca/~mdadams/jasper 
MPEG Playing MPEG files in Delphi apps (FAQ 1890D)

MPEG Audio Tools (Delphi Unit)
www.dv.co.yu/mpgscript/mpgtools.htm

Also see MP3 on the Multimedia page

PCX PC Paintbrush by Z-soft

TifIMG 16/32.  Delphi components provide for reading of numerous image formats such as TIFF, BMP, PCX, DCX, JPEG, TGA, WMF, WPG and the new PNG graphics format.
www.witsends.com/developer/products/tiffimg.htm 

Read PCX into TBitmap or write PCX from TBitmap using Davie Reed's PCX unit.
Download PCX.ZIP (282 KB), which also includes Delphi 3 demo program and sample PCX images (1, 2, 8 and 24-bit pixels).  Complete source code including assembly routines WritePCXLine and PixelConvertRGBLine.

TUniDIB.  Class for working with Device Independent Bitmaps. It can handle any allowed color depth. Now it has ability to load BMP and PCX files.  www.geocities.com/SiliconValley/Hills/1335/zip/unidib.zip

Supported by ImageLib www.imagelib.com

Michel Brazeau's UseNet Post about how to change DPI fields in PCX header

PDF

When you have an Acrobat (Reader) installed there is an OCX file in your Windows/System directory.   Import this file into Delphi and select the Acrobat Reader icon and drop an reader on the form.

Steven Van Hulle's UseNet post  (5 Dec 99):

Adobe supplies an ActiveX component with Acrobat Reader, which makes this
*very* easy:
Import ActiveX (Component menu in D4); file to import is PDF.OCX.
Will be added to ActiveX palette.
Drop one on a form.
Typical code to load file:

      if OpenDialog1.Execute then
        Pdf1.LoadFile(OpenDialog1.FileName);

Peter Below's (Team B) UseNet Post about printing PDF files

PDFlib allows you to implement PDF output in your own products.
www.pdflib.com 

PGM Non-Delphi:  Portable Greymap format:  wotsit.org 

Used with the AT&T Cambridge Laboratory's Database of Faces (400 images) at www.uk.research.att.com/facedatabase.html (see conversion section below for Delphi viewer)

PICT Primary format for Apple Macintosh graphics.
PNG Portable Network Graphics Delphi (by Gustavo Daud)
http://pngdelphi.sourceforge.net 

Peter Haas' overview for freeware png libraries with source:
http://delphi.pjh2.de/articles/graphic/png.php

PNG Graphics with Delphi and Kylix
http://www.psychology.nottingham.ac.uk/staff/cr1/png.html 

TPNGImage 
http://pngdelphi.sourceforge.net 

How to rebuild the LNPG library from public source code using Borland's free C++ compiler, and provided Delphi interface units
www.david-taylor.pwp.blueyonder.co.uk/software/components.html#PNGLibrary 

PngUnit -- PNG for Delphi.   Read, view and save PNG, convert BMP to PNG (PNG = Portable Network Graphics). Nothing to install. Compile and run the program. Source code included.  http://sharepower.virtualave.net/png.html

GRIP (Geographic Raster Image Processor) processes PNG format images. Import Landsat, Slar, SAR, and AVHRR imagery into the PNG format.  www.winsite.com/info/des_package_1500000034993.html 

Read, view and save PNG, convert BMP to PNG and PNG to BMP.  http://delphi.icm.edu.pl/ftp/d10free/pngunit.zip

Envision Image Library.  
The evaluation version of the Envision Image Library includes the compiled units (DCU's) and object files (OBJ's). Its supports Dephi 3, 4, 5, and C++ Builder 4. The download also includes complete source code for  registered users.  www.intervalsoftware.com/download.html

Web Graphic Formats
http://community.borland.com/article/1,1410,20027,00.html

TifIMG 16/32.  Delphi components provide for reading of numerous image formats such as TIFF, BMP, PCX, DCX, JPEG, TGA, WMF, WPG and the new PNG graphics format.
www.witsends.com/developer/products/tiffimg.htm 

Non-Delphi:  Portable Network Graphics ("ping" files). An alternative to GIF files. Technical information:  www.libpng.org/pub/png/ 

PNG Specification
www.libpng.org/pub/png/spec 

PS,
Postscript
Non-Delphi:
www.gnu.org/software/ghostscript/ghostscript.html
RichEdit to Canvas or TBitmap MBo's UseNet Posting with sample code
QuickTime Files Dominique Louis' UseNet Post with alternatives
SFF Structured Fax File 
Delphi unit: http://delphi.pjh2.de/units/sff.php
Format description: http://delphi.pjh2.de/articles/graphic/sff_format.php
SLD TSlide class is a TImage extension to support AutoCAD slide files (SLD). This allows slides to be loaded into the TPicture of a TImage. The RegisterFileFormat method of  TPicture enables preview of slides in the TOpenPictureDialog.  By Stephan Haugh from England.   TSlide.ZIP  (D3/D4/D5)
Sun Raster Files Example of reading three Sun Raster images into pf24bit TBitmap:
efg's Create Mandrill BMP Lab Report
TGA (Targa) Viewer:  Simple image viewer with high quality display of images even on 256-, 32K and 64K-colour adapters. Displays TGA, JPEG, GIF, WMF and BMP files. 
www.davidtaylor.freeserve.co.uk/software/imaging.html

A unit to work with graphics. Many effects like: motion blur, alpha blending, antialiasing, text, texture mapping, save/load  from BMP/TGA.
http://delphi.icm.edu.pl/ftp/d30free/graph64.zip

TifIMG 16/32.  Delphi components provide for reading of numerous image formats such as TIFF, BMP, PCX, DCX, JPEG, TGA, WMF, WPG and the new PNG graphics format.
www.witsends.com/developer/products/tiffimg.htm 

Read TGA into TBitmap or write TGA from TBitmap using Davie Reed's Targa unit.
Download Targa.ZIP (8 KB), which also includes Delphi 3/4/5 demo program.  (The program is hardwired to read the file, Scene.TGA, which is not provided.)

TIF, TIFF TIFF might stand for "Thousands of Incompatible File Formats" <g>

Greg Remington in UseNet Post:  "Unfortunately, the TIFF format is not simple to read or write correctly.  According to the specifications, only the first 8 bytes are fixed, everything else can be anywhere in the file.  Since many parts of the documentation have been differently interpreted by application programmers that have written TIFF files, a robust reader is difficult to write."

TifIMG 16/32
www.witsends.com/developer/products/tiffimg.htm 

TIFIMG
http://www.programmersheaven.com/zone2/cat497/5844.htm
 

Save BMP as TIFF 6.0  (D1-D5, updated Sept 2000)
http://delphi.icm.edu.pl/ftp/d10free/bmp2tiff.zip 
http://community.borland.com/homepages/dsp/ftp/d10free/bmp2tiff.zip 

TIFF to BMP
http://delphi.icm.edu.pl/ftp/d20free/tiff2bmp.zip
http://community.borland.com/homepages/dsp/ftp/d20free/tiff2bmp.zip 

TifIMG 16/32.  Delphi components provide for reading of numerous image formats such as TIFF, BMP, PCX, DCX, JPEG, TGA, WMF, WPG and the new PNG graphics format.
www.witsends.com/developer/products/tiffimg.htm 

GraphicEx unit is an enhancement to Graphics.pas to provide you with additional image types to load (other than BMP, ICO and WMF/EMF). These are the image types currently supported:
TIFF (both big endian and little endian format, uncompressed, LZW compressed), SGI (.bw and .rgb), Autodesk (.cel and .pic), Truevision (.tga, .vst, .icb, .vda, .win)
www.lischke-online.de/Graphics.html

TiffPack package was developed for a purposes of convenient operating in a Delphi's environment with a tiff images. From  previous versions this package differs by that it can more correctly work both OS, e.g. Windows NT and Windows 95(98).
http://delphi.icm.edu.pl/ftp/d30free/tiffpack.zip
[efg's note about TiffPack:  I would prefer that TiffPack install itself in a separate directory, instead of in the Delphi 3 directories.  With no examples and limited online help, I couldn't get this package to work in 30 minutes and gave up.   Does anyone have examples of how to use TiffPack?]

Envision Image Library.  The evaluation version of the Envision Image Library includes the compiled units (DCU's) and object files (OBJ's). Its supports Dephi 3, 4, 5, and C++ Builder 4. The download also includes complete source code for  registered users.   A commerical library for Delphi 3 or 4 with a nice price.   With Envision you can View and save Multi Page TIFFs, Rotate the images and Add images to the another Multi Page TIFF files. Also there is support for many other formats ( JPEG, PNG, TGA, BMP, TIFF, etc. ).  
http://delphi.icm.edu.pl/ftp/d30share/enlib104.zip
www.intervalsoftware.com/download.html

Tim Fagerman's UseNet Post about using Wang Imaging ActiveX Control.
Michel Brazeau's UseNet Post about Multi-Page TIFF

Non-Delphi 
- TIFF Links
- TIFF Software:  www.libtiff.org 

- Alex Weidauer's UseNet Post about how to compile libtiff with BCC5.5

YUV efg's YUV Lab Reports
WMF Windows Metafile. See EMF.

Carsten Kronenberg reports that Windows 95 has serious resource leaks when processing hundreds of WMF files.  The same problem has not been observed in Windows 98 or Windows 2000.


B.  File Format Conversions

The Converter's Paradise

Conversion(s) Description/Comments
anything to TBitmap TBitmap, BMP, DIB page

 

anything to BMP
BMP to anything TBitmap, BMP, DIB page
BitmapHandle to/from TBitmap TBitmap, BMP, DIB page
DIBtoBitmap Procedure in ImageLib Suite DLL.  Also see hDIB to TBitmap.
EMF to BMP Gordon Whittam's UseNet Post about this conversion
EMF to WMF "There is a bug in the EMF to WMF conversion code in Delphi 3 that overstates the scale of the image by a factor of 10.  (1/100th mm per inch should be 2540, not 25400)  This will make WMF files read by Delphi 3 smaller than normal (if you pay attention to the original scale information, which is usually absent), or WMF files written by Delphi 3 larger than normal in other apps (like Word 7).  Since the bug is symmetrical, WMFs written by Delphi 3 are read by Delphi 3 at the correct scale.  EMF files are not affected by this WMF conversion issue.   The WMF conversion scale problem is fixed in Delphi 4."
by Danny Thorpe in 10/5/98 post to borland.public.delphi.graphics.
hBitmap to TBitmap Herbert Dapper's UseNet Post
hDIB to TBitmap efg's Lead Tools-to-Delphi conversions show two ways to start with a hDIB and end up with a TBitmap.  
- Method 1. hDIB to TBitmap resulting in bmDDB using StretchDIBits
- Method 2. hDIB to TBitmap resulting in bmDIB using MemoryStream 
ICO to Cursor Kerstin Thaler's UseNet Post about how to convert ICO to a Cursor
ICO to TBitmap Howard Moon's UseNet Post with ConvertIconToBitmap procedure
Multiple Conversions "Image Conversion Lib" contains several components which let   you load, display, convert and save images in a very easy way.  All the most important image file formats are supported: BMP,  DIB, GIF, JPG, PCD, PCX, SCR, TIF. You can convert the images to  Indexed 2-Color, Indexed 16-Color, Indexed 256-Color, RGB True Color, Black & White, Grayscale-16 and Grayscale-256 image types.  Color Quantization: Popularity, Median-Cut. Dithering: None,  Floyd-Steinberg. The components offer resize and fade in/out  functions. You can import/export images to the TBitmap object (TImage component).
http://delphi.icm.edu.pl/ftp/d30share/imgcnvd3.zip
http://delphi.icm.edu.pl/ftp/d40share/imgcnvd4.zip
http://delphi.icm.edu.pl/ftp/c40share/imgcnvc4.zip

Component suite for image processing and analysis. TIFF (RGB,  CMYK,G3/G4 Fax,LZW), PNG, BMP, PCX, JPEG (RGB,CMYK,YCbCr,YCbCrK),  animated GIF (LZW and Non-LZW - no-Unisys licence); TWain   scanners (without DLL), video capture, thumbnail grids, create animations, vectorial objects (lines, box, ellipses, text...)  over bitmaps and more. Pure VCL code, no DLL required.
http://delphi.icm.edu.pl/ftp/d30share/ie14d3.zip
http://delphi.icm.edu.pl/ftp/d40share/ie14d4.zip

ImgSource.  is a Win32 DLL that can be used in any 32-bit environment capable of calling a Win32 DLL (VC++, VB, Access, SDK, etc). It provides over 160 image file and image processing functions.  Supports JPG, BMP, TIFF, Photoshop, WBMP, PNG, PCX, PAX, TLA, WMF, EMF, APM and TGA.  .  www.smalleranimals.com/isource.htm 
GraphicEx unit is an enhancement to Graphics.pas to provide you with additional image types to load (other than BMP, ICO and WMF/EMF). These are the image types currently supported:
TIFF (both big endian and little endian format, uncompressed, LZW compressed), SGI (.bw and .rgb), Autodesk (.cel and .pic), Truevision (.tga, .vst, .icb, .vda, .win), Kodak Photo-CD images (*.pcd)
www.lischke-online.de/Graphics.html

http://delphi.icm.edu.pl/ftp/d30share/GraphicEx9.zip 

Viewer:  Simple image viewer with high quality display of images even on 256-, 32K and 64K-colour adapters. Displays TGA, JPEG, GIF, WMF and BMP files. 
www.davidtaylor.freeserve.co.uk/software/imaging.html
ImageEn is a component suite for image processing, viewing and analysis. It can load and save from varios image file formats, acquire from TWain scanners (single and multi pages), capture videos, applies filters, merge images, and other.  ImageEn allow you to include some Photo Shop or Photo Paint features in your programs.  ImageEn works on Delphi 3, Delphi 4, Delphi5, C++Builder 3 and C++Builder 4.- Load and save JPEG in true color or gray levels to file or stream.
- Load and save TIFF (rev.6.0, Packbits, LZW, CCITT G.3 and G.4) in true color and B/W to file or stream.
- Load and save PNG with various compression levels.
- Load and save compressed and uncompressed BMP in 2,16,256 or 16M colors to file or stream.
- Load and save compressed and uncompressed PCX in 2,16,256 or 16M colors to file or stream.
- Load and save 2,4,8,16,32,64,128 or 256 colors GIF to file or stream.
- Load WMF, EMF, ICO and CUR.
- Load and save AVI, animated GIF and multi-TIFF.
- Editing of animated GIF: extract, insert and delete single images.
- Editing of multi TIFF: extract, insert and delete single images.
- Included source code of a sample plug-in to read/write LZW Gif and TIFF.
www.hicomponents.com 
http://delphi.icm.edu.pl/ftp/d30share/ie15d3.zip
http://delphi.icm.edu.pl/ftp/d40share/ie15d4.zip
http://delphi.icm.edu.pl/ftp/d50share/ie15d5.zip
Component suite for image processing and analysis. BMP, PCX, JPEG, animated  GIF  (LZW and NON-LZW no-Unisys licence!) and TIFF;   Twain scanners. http://delphi.icm.edu.pl/ftp/d30free/imag070b.zip http://delphi.icm.edu.pl/ftp/d30free/imag065b.zip
TThumbNail is a component to handle any image as a  thumbnail it can only opens emf, wmf, bmp, jpg file types.  TThumbview is a component that displays all the components  in a directory as thumbnails. http://delphi.icm.edu.pl/ftp/d30free/thumbs.zip
ImageLib by Skyline Tools: ImageLib is a professional software development tool that allows a programmer to incorporate BMP, CMS, GIF, ICO, JPEG, PCX, PNG, SCM, IMG, TIFF, TIFF CCITT 3 and 4, Multipage TIFF, Packbits, PCD (Photo CD-Kodak), LZW, (most flavors), DXF, PCD, TGA, EPS, WMF and other image formats into applications. In addition, AVI, MOV, MID, WAV, and RMI multimedia formats are supported. These image and multimedia formats can be implemented to/from a file or database BLOB field. www.imagelib.com

efg's example of converting from Lead's BitmapHandle with a BMP to several formats including CMP, EPS, JPG, PCT, PCX, PNG, RAS, TGA, TIF, WMF, or from TBitmap to BitmapHandle


The Envision Image Library provides image file I/O for popular file formats (TIFF, PNG, JPEG, BMP, PCX, TGA, ICO, WFM, EMF), printing, scanning and image processing features.  Twain scanning.  Image processing:   anti-aliasing, brightness, contrast, convert to gray, edge detection, emboss, sharpen, flip vertical and horizontal, gamma adjustment, negative, interpolated resize, rotate 90, 180, 270 and arbitrary angle, cropping, format conversion including Floyd Steinberg dithering and color quantization.  For Delphi 3, 4 or 5, or Builder 4.   www.intervalsoftware.com

Schoeneck Howell in a UseNet Posting:  "I just started using the Envision image library...  I mainly picked it up for TIF support, but its TJpegGraphic works with Timage and eliminated the 'error 36' on GIF to JPEG translation saves producing 1MB+ JPG's, that I previously had been seeing.  The package also has some nice features like: no external DLLs; TWAIN support; image processing; flexible printing; and an ImageScrollBox component with smooth mouse grab panning.  Registration was $49 US and included source. The evaluation copy is fully functional (sans source), but includes nag screen & image branding."

NViewLib.DLL
- Support more graphic format: JPG, JIF, GIF, BMP, DIB, RLE, TGA, PCX. 
- Both 16 bit and 32 bit dll. 
- Detect JPG and GIF by parsing the file

 http://members.aol.com/andykkwtz/_private/seite622.htm 

Resource-Grabber The Resource-Grabber will scan the directories and drives on your computer and extract all Bitmaps, Glyphs (button images), Icons, Cursors, JPG/JPEG images, WAVE and RMI sound files as well as AVI video clips it finds inside the programs and DLL files in any directory of your choice.  http://inner-smile.com/dl_res.htm
PGM to BMP or JPG See efg's Interactive PGMP5 "viewer" to display PGM files (P5 format) or the command-line utility ConvertFaces to convert PGM files of the AT&T Laboratories Cambridge Database of Faces (400 images) at www.uk.research.att.com/facedatabase.html to BMP or JPG: PortableGrayMap.ZIP
TBitmap to anything TBitmap, BMP, DIB page
TChart Canvas to GIF See Anders Melander's UseNet Post
YUV to RGB efg's YUV Lab Reports
WMF to BMP Harm's UseNet Post with example
WMF to EMF JoŽl Joly's UseNet Post with example
WMFtoBitmap
WMFtoDIB
Procedures in ImageLib Suite DLL.

C.  Image Compression

Components

List of Components
www.programmersheaven.com/zone2/cat56/index.htm
 

Compression Library Project JEDI contribution by Mariusz Klimczak
www.delphi-jedi.org/Jedi:API_TOOLS:236830434 
ftp://delphi-jedi.org//tools/d_hsdll.zip  
Compression Pointers www.internz.com/compression-pointers.html
DelphiZLib The DelphiZlib package contains a TGzip, TCrc32 and TAdler32 component.
http://delphi.icm.edu.pl/ftp/d30free/nikkelen.zip 
GIF Non-Delphi GIF Links
FAQ comp.compression Newsgroup FAQ
www.faqs.org/faqs/by-newsgroup/comp/comp.compression.html
FIF Fractal Image Format from Iterated Systems, Inc. 
See Fractal Image Decoder for 32-bit Windows on the Delphi 3/4 CD: \INFO\EXTRAS\FIF.   NOT on the Delphi 5 CD.

Mark L. Tiede's UseNet Post

[Foley96, pp. 846-850]

Image Compression:  JPEG Image Compression:  JPEG
http://pascalzone.amirmelamed.co.il/Graphics/JPEG/JPEG.htm
 
JPEG (lossy) Non-Delphi JPEG Links
See Delphi 3/4/5 CD: \INFO\EXTRAS\JPEG
Run-Length Encoding (RLE) Compressing 256 Color Bitmaps
www.undu.com/Articles/980311b.htm
wavelets See efg's Mathematics Reference Library
Xceed Zip Compression Library www.xceedsoft.com/html/xz_intro.html 
ZIP Eric Engler's Freeware Delphi Zip package
Zlib

Mike Orriss' UseNet Post with CompressStream and ExpandStream procedure using Zlib.

Zlib can be found on the Delphi installation disk in the directory \Info\Extras\Zlib.


D.  Other File Format Resources

Graphics File Formats (non-Delphi information) www.wotsit.org
www.dcs.ed.ac.uk/~mxr/gfx
My File Formats http://myfileformats.com 
Index of /soft/compgraph/
fileformats/docs
www.tnt.uni-hannover.de/soft/compgraph/fileformats/docs
PKZip www.pkware.com
Print to Graphics File Print to graphics file format using special printer driver:  PEERNET.DRV Pro Driver
www.peernet.com/drivers/C._PRO_Driver.html  
TWAIN Image Acquisition Using TWAIN, Sept. 1994, Dr. Dobb's Journal
www.ddj.com/articles/1994/9409/9409i/9409i.htm

www.twain.org 

Web graphics Optimizing Web Graphics:  The Great Bandwidth Shortage
http://webreference.com/dev/graphics
WinZIP www.winzip.com

Links Verified 27 Feb 2005
Updated 27 Feb 2005


since 1 Nov 1998