📄 libjpeg.pas
字号:
unit LibJPEG;
{ Quick, dirty and ugly conversion of some header files of the IJG JPEG library.
Only those declarations needed by the Advanced Image Coding application
are converted.
Based on the IJG JPEG library version 6b }
interface
{$ALIGN 8} // Align 8-byte data types on 8-byte boundaries
{$MINENUMSIZE 4} // Enumerations are 4 bytes minimum
type
J_MESSAGE_CODE = (
JMSG_NOMESSAGE,
JERR_ARITH_NOTIMPL, JERR_BAD_ALIGN_TYPE, JERR_BAD_ALLOC_CHUNK, JERR_BAD_BUFFER_MODE, JERR_BAD_COMPONENT_ID, JERR_BAD_DCT_COEF, JERR_BAD_DCTSIZE, ERR_BAD_HUFF_TABLE, ERR_BAD_IN_COLORSPACE, JERR_BAD_J_COLORSPACE, JERR_BAD_LENGTH, JERR_BAD_LIB_VERSION, JERR_BAD_MCU_SIZE, JERR_BAD_POOL_ID, JERR_BAD_PRECISION, JERR_BAD_PROGRESSION, JERR_BAD_PROG_SCRIPT, JERR_BAD_SAMPLING, JERR_BAD_SCAN_SCRIPT, JERR_BAD_STATE, JERR_BAD_STRUCT_SIZE, JERR_BAD_VIRTUAL_ACCESS, JERR_BUFFER_SIZE, JERR_CANT_SUSPEND, JERR_CCIR601_NOTIMPL, JERR_COMPONENT_COUNT, JERR_CONVERSION_NOTIMPL, JERR_DAC_INDEX, JERR_DAC_VALUE, JERR_DHT_INDEX, JERR_DQT_INDEX, JERR_EMPTY_IMAGE, JERR_EMS_READ, JERR_EMS_WRITE, JERR_EOI_EXPECTED, JERR_FILE_READ, JERR_FILE_WRITE, JERR_FRACT_SAMPLE_NOTIMPL, JERR_HUFF_CLEN_OVERFLOW, JERR_HUFF_MISSING_CODE, JERR_IMAGE_TOO_BIG, JERR_INPUT_EMPTY, JERR_INPUT_EOF, JERR_MISMATCHED_QUANT_TABLE, JERR_MISSING_DATA, JERR_MODE_CHANGE, JERR_NOTIMPL, JERR_NOT_COMPILED, JERR_NO_BACKING_STORE, JERR_NO_HUFF_TABLE, JERR_NO_IMAGE, JERR_NO_QUANT_TABLE, JERR_NO_SOI, JERR_OUT_OF_MEMORY, JERR_QUANT_COMPONENTS, JERR_QUANT_FEW_COLORS, JERR_QUANT_MANY_COLORS, JERR_SOF_DUPLICATE, JERR_SOF_NO_SOS, JERR_SOF_UNSUPPORTED, JERR_SOI_DUPLICATE, JERR_SOS_NO_SOF, JERR_TFILE_CREATE, JERR_TFILE_READ, JERR_TFILE_SEEK, JERR_TFILE_WRITE, JERR_TOO_LITTLE_DATA, JERR_UNKNOWN_MARKER, JERR_VIRTUAL_BUG, JERR_WIDTH_OVERFLOW, JERR_XMS_READ, JERR_XMS_WRITE, JMSG_COPYRIGHT, JMSG_VERSION, JTRC_16BIT_TABLES, JTRC_ADOBE, JTRC_APP0, JTRC_APP14, JTRC_DAC, JTRC_DHT, JTRC_DQT, JTRC_DRI, JTRC_EMS_CLOSE, JTRC_EMS_OPEN, JTRC_EOI, JTRC_HUFFBITS, JTRC_JFIF, JTRC_JFIF_BADTHUMBNAILSIZE, JTRC_JFIF_EXTENSION, JTRC_JFIF_THUMBNAIL, JTRC_MISC_MARKER, JTRC_PARMLESS_MARKER, JTRC_QUANTVALS, JTRC_QUANT_3_NCOLORS, JTRC_QUANT_NCOLORS, JTRC_QUANT_SELECTED, JTRC_RECOVERY_ACTION, JTRC_RST, JTRC_SMOOTH_NOTIMPL, JTRC_SOF, JTRC_SOF_COMPONENT, JTRC_SOI, JTRC_SOS, JTRC_SOS_COMPONENT, JTRC_SOS_PARAMS, JTRC_TFILE_CLOSE, JTRC_TFILE_OPEN, JTRC_THUMB_JPEG, JTRC_THUMB_PALETTE, JTRC_THUMB_RGB, JTRC_UNKNOWN_IDS, JTRC_XMS_CLOSE, JTRC_XMS_OPEN, JWRN_ADOBE_XFORM, JWRN_BOGUS_PROGRESSION, JWRN_EXTRANEOUS_DATA, JWRN_HIT_MARKER, JWRN_HUFF_BAD_CODE, JWRN_JFIF_MAJOR, JWRN_JPEG_EOF, JWRN_MUST_RESYNC, JWRN_NOT_SEQUENTIAL, JWRN_TOO_MUCH_DATA );const
DCTSIZE = 8;
DCTSIZE2 = 64;
NUM_QUANT_TBLS = 4;
NUM_HUFF_TBLS = 4;
NUM_ARITH_TBLS = 16;
MAX_COMPS_IN_SCAN = 4;
C_MAX_BLOCKS_IN_MCU = 10;
D_MAX_BLOCKS_IN_MCU = 10;
JMSG_LENGTH_MAX = 200; (* recommended size of format_message buffer *)
JMSG_STR_PARM_MAX = 80;
JPEG_LIB_VERSION = 62;
const
JPOOL_PERMANENT = 0;
JPOOL_IMAGE = 1; JPOOL_NUMPOOLS = 2;const JPEG_RST0 = $D0; // RST0 marker code
JPEG_EOI = $D9; // EOI marker code JPEG_APP0 = $E0; // APP0 marker code JPEG_COM = $FE; // COM marker codetype
int = Integer;
uint = Cardinal;
long = Longint;
pint = ^int;
size_t = uint;
UINT8 = Byte;
UINT16 = Word;
// Boolean = Longbool;
JDIMENSION = uint;
JSAMPLE = Byte;
JSAMPROW = ^JSAMPLE;
JSAMPARRAY = ^JSAMPROW;
JSAMPIMAGE = ^JSAMPARRAY;
JOCTET = Byte;
PJSAMPLE = ^JSAMPLE;
PJOCTET = ^JOCTET;
JMETHOD = procedure; cdecl;
J_COLOR_SPACE = (
JCS_UNKNOWN, (* error/unspecified *)
JCS_GRAYSCALE, (* monochrome *) JCS_RGB, (* red/green/blue *) JCS_YCbCr, (* Y/Cb/Cr (also known as YUV) *) JCS_CMYK, (* C/M/Y/K *) JCS_YCCK); (* Y/Cb/Cr/K *) J_DCT_METHOD = ( JDCT_ISLOW, (* slow but accurate integer algorithm *) JDCT_IFAST, (* faster, less accurate integer method *) JDCT_FLOAT); (* floating-point: accurate, fast on fast HW *) J_DITHER_MODE = ( JDITHER_NONE, (* no dithering *) JDITHER_ORDERED, (* simple ordered dither *) JDITHER_FS); (* Floyd-Steinberg error diffusion dither *)type
pjpeg_error_mgr = ^jpeg_error_mgr;
pjpeg_memory_mgr = ^jpeg_memory_mgr;
pjpeg_progress_mgr = Pointer;
pjpeg_source_mgr = ^jpeg_source_mgr;
pjpeg_component_info = Pointer;
pjpeg_decomp_master = Pointer;
pjpeg_d_main_controller = Pointer; pjpeg_d_coef_controller = Pointer; pjpeg_d_post_controller = Pointer; pjpeg_input_controller = Pointer; pjpeg_marker_reader = Pointer; pjpeg_entropy_decoder = Pointer; pjpeg_inverse_dct = Pointer; pjpeg_upsampler = Pointer; pjpeg_color_deconverter = Pointer; pjpeg_color_quantizer = Pointer; pjpeg_destination_mgr = ^jpeg_destination_mgr; pjpeg_scan_info = ^jpeg_scan_info; pjpeg_comp_master = Pointer; pjpeg_c_main_controller = Pointer; pjpeg_c_prep_controller = Pointer; pjpeg_c_coef_controller = Pointer; pjpeg_marker_writer = Pointer; pjpeg_color_converter = Pointer; pjpeg_downsampler = Pointer; pjpeg_forward_dct = Pointer; pjpeg_entropy_encoder = Pointer; PJQUANT_TBL = Pointer;
PJHUFF_TBL = Pointer;
jpeg_saved_marker_ptr = Pointer;
j_common_ptr = ^jpeg_common_struct;
j_decompress_ptr = ^jpeg_decompress_struct;
jpeg_common_struct = record
err: pjpeg_error_mgr; (* Error handler module *)
mem: pjpeg_memory_mgr; (* Memory manager module *)
progress: pjpeg_progress_mgr; (* Progress monitor, or NULL if none *) client_data: Pointer; (* Available for use by application *) is_decompressor: Boolean; (* So common code can tell which is which *) global_state: int; (* For checking call sequence validity *) end;
tcoef_bits = array [0..DCTSIZE2-1] of pint;
pcoef_bits = ^tcoef_bits;
pjpeg_decompress_struct = ^jpeg_decompress_struct;
jpeg_decompress_struct = record
err: pjpeg_error_mgr; (* Error handler module *)
mem: pjpeg_memory_mgr; (* Memory manager module *)
progress: pjpeg_progress_mgr; (* Progress monitor, or NULL if none *) client_data: Pointer; (* Available for use by application *) is_decompressor: Boolean; (* So common code can tell which is which *) global_state: int; (* For checking call sequence validity *)
(* Source of compressed data *) src: pjpeg_source_mgr; (* Basic description of image --- filled in by jpeg_read_header(). *) (* Application may inspect these values to decide how to process image. *) image_width: JDIMENSION; (* nominal image width (from SOF marker) *) image_height: JDIMENSION; (* nominal image height *) num_components: int; (* # of color components in JPEG image *) jpeg_color_space: J_COLOR_SPACE; (* colorspace of JPEG image *) (* Decompression processing parameters --- these fields must be set before
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -