📄 imageenio.pas
字号:
(*
Copyright (c) 1998-2007 by HiComponents. All rights reserved.
This software comes without express or implied warranty.
In no case shall the author be liable for any damage or unwanted behavior of any
computer hardware and/or software.
HiComponents grants you the right to include the compiled component
in your application, whether COMMERCIAL, SHAREWARE, or FREEWARE,
BUT YOU MAY NOT DISTRIBUTE THIS SOURCE CODE OR ITS COMPILED .DCU IN ANY FORM.
ImageEn, IEvolution and ImageEn ActiveX may not be included in any commercial,
shareware or freeware libraries or components.
email: support@hicomponents.com
http://www.hicomponents.com
*)
unit imageenio;
{$R-}
{$Q-}
{$I ie.inc}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ieview,
ImageEnProc, ExtCtrls, hyiedefs, hyieutils, Dialogs,
{$IFDEF IEINCLUDETWAIN}
ietwain,
{$ENDIF}
{$IFDEF IEINCLUDEWIA}
iewia,
{$ENDIF}
{$IFDEF IEINCLUDEDIRECTSHOW}
ieds,
{$ENDIF}
printers;
{$IFDEF FPC}
uses SysUtils,Types,Classes,ieview,imageenproc,hyiedefs,hyieutils;
{$ENDIF}
const
IEMAXICOIMAGES = 16;
// Jpeg markers
JPEG_APP0 = $E0;
JPEG_APP1 = $E1;
JPEG_APP2 = $E2;
JPEG_APP3 = $E3;
JPEG_APP4 = $E4;
JPEG_APP5 = $E5;
JPEG_APP6 = $E6;
JPEG_APP7 = $E7;
JPEG_APP8 = $E8;
JPEG_APP9 = $E9;
JPEG_APP10 = $EA;
JPEG_APP11 = $EB;
JPEG_APP12 = $EC;
JPEG_APP13 = $ED;
JPEG_APP14 = $EE;
JPEG_APP15 = $EF;
JPEG_COM = $FE;
// Standard TWain sizes
IETW_NONE = 0;
IETW_A4LETTER = 1;
IETW_B5LETTER = 2;
IETW_USLETTER = 3;
IETW_USLEGAL = 4;
IETW_A5 = 5;
IETW_B4 = 6;
IETW_B6 = 7;
IETW_USLEDGER = 9;
IETW_USEXECUTIVE = 10;
IETW_A3 = 11;
IETW_B3 = 12;
IETW_A6 = 13;
IETW_C4 = 14;
IETW_C5 = 15;
IETW_C6 = 16;
IETW_4A0 = 17;
IETW_2A0 = 18;
IETW_A0 = 19;
IETW_A1 = 20;
IETW_A2 = 21;
IETW_A4 = IETW_A4LETTER;
IETW_A7 = 22;
IETW_A8 = 23;
IETW_A9 = 24;
IETW_A10 = 25;
IETW_ISOB0 = 26;
IETW_ISOB1 = 27;
IETW_ISOB2 = 28;
IETW_ISOB3 = IETW_B3;
IETW_ISOB4 = IETW_B4;
IETW_ISOB5 = 29;
IETW_ISOB6 = IETW_B6;
IETW_ISOB7 = 30;
IETW_ISOB8 = 31;
IETW_ISOB9 = 32;
IETW_ISOB10 = 33;
IETW_JISB0 = 34;
IETW_JISB1 = 35;
IETW_JISB2 = 36;
IETW_JISB3 = 37;
IETW_JISB4 = 38;
IETW_JISB5 = IETW_B5LETTER;
IETW_JISB6 = 39;
IETW_JISB7 = 40;
IETW_JISB8 = 41;
IETW_JISB9 = 42;
IETW_JISB10 = 43;
IETW_C0 = 44;
IETW_C1 = 45;
IETW_C2 = 46;
IETW_C3 = 47;
IETW_C7 = 48;
IETW_C8 = 49;
IETW_C9 = 50;
IETW_C10 = 51;
IETW_USSTATEMENT = 52;
IETW_BUSINESSCARD = 53;
type
{!!
<FS>TIETextFormat
<FM>Declaration<FC>
}
TIETextFormat = (ietfPascal, ietfHEX, ietfBase64, ietfASCIIArt);
{!!}
{!!
<FS>TIEAcquireApi
<FM>Declaration<FC>
TIEAcquireApi = (ieaTWain, ieaWIA);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>ieaTWain</C> <C>acquire from Twain device</C> </R>
<R> <C>ieaWIA</C> <C>acquire from WIA (scanners or camera)</C> </R>
</TABLE>
!!}
TIEAcquireApi = (ieaTWain, ieaWIA);
{!!
<FS>TIEAcquireBitmapEvent
<FM>Declaration<FC>
TIEAcquireBitmapEvent = procedure(Sender: TObject; ABitmap: <A TIEBitmap>; var Handled: boolean) of object;
<FM>Description<FN>
ABitmap is a TIEBitmap object that contains the acquired image.
Setting Handled to True (default is False) causes ImageEn to ignore this image (do not insert it in the <A TImageEnMView> control).
!!}
TIEAcquireBitmapEvent = procedure(Sender: TObject; ABitmap: TIEBitmap; var Handled: boolean) of object;
{!!
<FS>TIEJpegTransform
<FM>Declaration<FC>
TIEJpegTransform = (jtNone, jtCut, jtHorizFlip, jtVertFlip, jtTranspose, jtTransverse, jtRotate90, jtRotate180, jtRotate270);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>jtNone</C> <C>no transformation</C> </R>
<R> <C>jtCut</C> <C>cuts out part of the image</C> </R>
<R> <C>jtHorizFlip</C> <C>Mirror image horizontally (left-right).</C> </R>
<R> <C>jtVertFlip</C> <C>Mirror image vertically (top-bottom).</C> </R>
<R> <C>jtTranspose</C> <C>Transpose image (across UL-to-LR axis).</C> </R>
<R> <C>jtTransverse</C> <C>Transverse transpose (across UR-to-LL axis).</C> </R>
<R> <C>jtRotate90</C> <C>Rotate image 90 degrees clockwise.</C> </R>
<R> <C>jtRotate180</C> <C>Rotate image 180 degrees.</C> </R>
<R> <C>jtRotate270</C> <C>Rotate image 270 degrees clockwise (or 90 ccw).</C> </R>
</TABLE>
!!}
TIEJpegTransform = (jtNone, jtCut, jtHorizFlip, jtVertFlip, jtTranspose, jtTransverse, jtRotate90, jtRotate180, jtRotate270);
{!!
<FS>TIEJpegCopyMarkers
<FM>Declaration<FC>
TIEJpegCopyMarkers = (jcCopyNone, jcCopyComments, jcCopyAll);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>jcCopyNone</C> <C>Copy no extra markers from source file. This setting suppresses all comments and other excess baggage present in the source file.</C> </R>
<R> <C>jcCopyComments</C> <C>Copy only comment markers. This setting copies comments from the source file, but discards any other inessential data.</C> </R>
<R> <C>jcCopyAll</C> <C>Copy all extra markers. This setting preserves miscellaneous markers found in the source file, such as JFIF thumbnails and Photoshop settings. In some files these extra markers can be sizable.</C> </R>
</TABLE>
!!}
TIEJpegCopyMarkers = (jcCopyNone, jcCopyComments, jcCopyAll);
// Header used to save a jpeg inside a Stream
TStreamJpegHeader = record
ID: array[0..4] of char; // ="JFIF\0"
dim: integer; // length of jpeg box
end;
// Header used to save a PCX inside a Stream
PCXSHead = record
ID: array[0..4] of char; // 'PCX2\0'
dim: integer;
end;
// Header used to save a TIFF inside a Stream
TIFFSHead = record
ID: array[0..4] of char; // 'TIFF\0'
dim: integer;
end;
{!!
<FS>TPreviewParams
<FM>Declaration<FC>
type TPreviewParams = set of (ppALL, ppAUTO, ppJPEG, ppTIFF, ppGIF, ppBMP, ppPCX, ppPNG, ppTGA, ppJ2000);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>ppALL</C> <C>shows all pages.</C> </R>
<R> <C>ppAUTO</C> <C>shows the page specified in Params.FileType property.</C> </R>
<R> <C>ppJPEG</C> <C>shows JPEG parameters.</C> </R>
<R> <C>ppTIFF</C> <C>shows TIFF paramaters.</C> </R>
<R> <C>ppGIF</C> <C>shows GIF, non-animated paramters.</C> </R>
<R> <C>ppBMP</C> <C>shows BMP parameters.</C> </R>
<R> <C>ppPCX</C> <C>shows PCX parameters.</C> </R>
<R> <C>ppPNG</C> <C>shows PNG parameters.</C> </R>
<R> <C>ppTGA</C> <C>shows TGA parameters.</C> </R>
<R> <C>ppJ2000</C> <C>shows JPEG2000 parameters.</C> </R>
</TABLE>
!!}
TPreviewParams = set of (
ppALL,
ppAUTO,
ppJPEG,
ppTIFF,
ppGIF,
ppBMP,
ppPCX,
ppPNG,
ppTGA
{$IFDEF IEINCLUDEJPEG2000}
, ppJ2000
{$ENDIF}
);
{!!
<FS>TGIFLZWCompFunc
<FM>Declaration<FC>
}
TGIFLZWCompFunc = procedure(Stream: TStream; Height, Width: integer; Interlaced: boolean; FData: pchar; BitsPerPixel: integer);
{!!}
{!!
<FS>TGIFLZWDecompFunc
<FM>Declaration<FC>
}
TGIFLZWDecompFunc = procedure(Stream: TStream; Height, Width: integer; Interlaced: boolean; FData: pchar);
{!!}
{!!
<FS>TTIFFLZWDecompFunc
<FM>Declaration<FC>
}
TTIFFLZWDecompFunc = function(CompBuf: pbyte; LineSize: integer; var Id: integer): pbyte;
{!!}
{!!
<FS>TTIFFLZWCompFunc
<FM>Declaration<FC>
}
TTIFFLZWCompFunc = procedure(indata: pbyte; inputlen: integer; outstream: TStream; var id: integer);
{!!}
// previews properties
{!!
<FS>TIOPreviewsParamsItems
<FM>Declaration<FC>
TIOPreviewsParamsItems = (ioppDefaultLockPreview, ioppApplyButton);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>ioppDefaultLockPreview</C> <C>the "Lock preview" button will be down</C> </R>
<R> <C>ioppApplyButton</C> <C>the "Apply" button is shown</C> </R>
</TABLE>
!!}
TIOPreviewsParamsItems = (ioppDefaultLockPreview, ioppApplyButton);
{!!
<FS>TIOPreviewsParams
<FM>Declaration<FC>
TIOPreviewsParams = set of <A TIOPreviewsParamsItems>;
!!}
TIOPreviewsParams = set of TIOPreviewsParamsItems;
// printing properties
{!!
<FS>TIEVerticalPos
<FM>Declaration<FC>
TIEVerticalPos = (ievpTOP, ievpCENTER, ievpBOTTOM);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>ievpTOP</C> <C>the image is top aligned</C> </R>
<R> <C>ievpCENTER</C> <C>the image is center aligned</C> </R>
<R> <C>ievpBOTTOM</C> <C>the image is bottom aligned</C> </R>
</TABLE>
!!}
TIEVerticalPos = (ievpTOP, ievpCENTER, ievpBOTTOM);
{!!
<FS>TIEHorizontalPos
<FM>Declaration<FC>
TIEHorizontalPos = (iehpLEFT, iehpCENTER, iehpRIGHT);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>iehpLEFT</C> <C>the image is left aligned</C> </R>
<R> <C>iehpCENTER</C> <C>the image is center aligned</C> </R>
<R> <C>iehpRIGHT</C> <C>the image is right aligned</C> </R>
</TABLE>
!!}
TIEHorizontalPos = (iehpLEFT, iehpCENTER, iehpRIGHT);
{!!
<FS>TIESize
<FM>Declaration<FC>
TIESize = (iesNORMAL, iesFITTOPAGE, iesFITTOPAGESTRETCH, iesSPECIFIEDSIZE);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>iesNORMAL</C> <C>the size is determined by original image DPI (used for real size copy)</C> </R>
<R> <C>iesFITTOPAGE</C> <C>stretch the image to fit the page respecting the proportions</C> </R>
<R> <C>iesFITTOPAGESTRETCH</C> <C>stretch the image to fit the page</C> </R>
<R> <C>iesSPECIFIEDSIZE</C> <C>specify absolute sizes with the SpecWidth and SpecHeight parameters</C> </R>
</TABLE>
!!}
TIESize = (iesNORMAL, iesFITTOPAGE, iesFITTOPAGESTRETCH, iesSPECIFIEDSIZE);
{!!
<FS>TIOPSCompression
<FM>Declaration<FC>
TIOPSCompression = (
ioPS_RLE,
ioPS_G4FAX,
ioPS_G3FAX2D,
ioPS_JPEG
);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>ioPS_RLE</C> <C>run length compression</C> </R>
<R> <C>ioPS_G4FAX</C> <C>G4Fax (only black/white images)</C> </R>
<R> <C>ioPS_G3FAX2D</C> <C>G3Fax (only black/white images)</C> </R>
<R> <C>ioPS_JPEG</C> <C>DCT-jpeg (only color images)</C> </R>
</TABLE>
!!}
TIOPSCompression = (
ioPS_RLE,
ioPS_G4FAX,
ioPS_G3FAX2D,
ioPS_JPEG
);
{!!
<FS>TIOPDFCompression
<FM>Declaration<FC>
TIOPDFCompression = (
ioPDF_UNCOMPRESSED,
ioPDF_RLE,
ioPDF_G4FAX,
ioPDF_G3FAX2D,
ioPDF_JPEG,
ioPDF_LZW
);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>ioPDF_UNCOMPRESSED</C> <C>no compression</C> </R>
<R> <C>ioPDF_RLE</C> <C>run length compression</C> </R>
<R> <C>ioPDF_G4FAX</C> <C>G4Fax (only black/white images)</C> </R>
<R> <C>ioPDF_G3FAX2D</C> <C>G3Fax (only black/white images)</C> </R>
<R> <C>ioPDF_JPEG</C> <C>DCT-jpeg (only color images)</C> </R>
<R> <C>ioPDF_LZW</C> <C>LZW compression (for color and black/white images)</C> </R>
</TABLE>
!!}
TIOPDFCompression = (
ioPDF_UNCOMPRESSED,
ioPDF_RLE,
ioPDF_G4FAX,
ioPDF_G3FAX2D,
ioPDF_JPEG,
ioPDF_LZW
);
{!!
<FS>TIOTIFFCompression
<FM>Declaration<FC>
type TIOTIFFCompression = (ioTIFF_UNCOMPRESSED, ioTIFF_CCITT1D, ioTIFF_G3FAX1D, ioTIFF_G3FAX2D, ioTIFF_G4FAX, ioTIFF_LZW, ioTIFF_OLDJPEG, ioTIFF_JPEG, ioTIFF_PACKBITS, ioTIFF_ZIP, ioTIFF_DEFLATE, ioTIFF_UNKNOWN);
<FM>Description<FN>
<TABLE>
<R> <H>Value</H> <H>Description</H> </R>
<R> <C>ioTIFF_UNCOMPRESSED</C> <C>Uncompressed TIFF. Supports all pixel formats and alpha channel.</C> </R>
<R> <C>ioTIFF_CCITT1D</C> <C>Bilevel Huffman compression. Only black/white images, no alpha channel.</C> </R>
<R> <C>ioTIFF_G3FAX1D</C> <C>Bilevel Group 3 CCITT compression, monodimensional. Only black/white images, no alpha channel.</C> </R>
<R> <C>ioTIFF_G3FAX2D</C> <C>Bilevel Group 3 CCITT compression, bidimensional. Only black/white images, no alpha channel.</C> </R>
<R> <C>ioTIFF_G4FAX</C> <C>Bilevel Group 4 CCITT compression, bidimensional. Only black/white images, no alpha channel.</C> </R>
<R> <C>IoTIFF_LZW</C> <C>LZW compression. Supports alpha channel.</C> </R>
<R> <C>ioTIFF_OLDJPEG</C> <C>Ver.6.0 jpeg compression (unsupported). Only true color images, no alpha channel.</C> </R>
<R> <C>ioTIFF_JPEG</C> <C>Jpeg compression. Only true color images, no alpha channel.</C> </R>
<R> <C>ioTIFF_PACKBITS</C> <C>RLE compression. Supports alpha channel.</C> </R>
<R> <C>ioTIFF_ZIP</C> <C>ZIP compression (non TIFF standard). No alpha channel.</C> </R>
<R> <C>ioTIFF_DEFLATE</C> <C>Adobe ZIP compression (non TIFF standard). No alpha channel.</C> </R>
<R> <C>ioTIFF_UNKNOWN</C> <C>Unknown compression</C> </R>
</TABLE>
!!}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -