亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? libjpeg.doc

?? JPEG source code converts the image into compressed format
?? DOC
?? 第 1 頁 / 共 5 頁
字號:
USING THE IJG JPEG LIBRARY

Copyright (C) 1994-1998, Thomas G. Lane.
This file is part of the Independent JPEG Group's software.
For conditions of distribution and use, see the accompanying README file.


This file describes how to use the IJG JPEG library within an application
program.  Read it if you want to write a program that uses the library.

The file example.c provides heavily commented skeleton code for calling the
JPEG library.  Also see jpeglib.h (the include file to be used by application
programs) for full details about data structures and function parameter lists.
The library source code, of course, is the ultimate reference.

Note that there have been *major* changes from the application interface
presented by IJG version 4 and earlier versions.  The old design had several
inherent limitations, and it had accumulated a lot of cruft as we added
features while trying to minimize application-interface changes.  We have
sacrificed backward compatibility in the version 5 rewrite, but we think the
improvements justify this.


TABLE OF CONTENTS
-----------------

Overview:
	Functions provided by the library
	Outline of typical usage
Basic library usage:
	Data formats
	Compression details
	Decompression details
	Mechanics of usage: include files, linking, etc
Advanced features:
	Compression parameter selection
	Decompression parameter selection
	Special color spaces
	Error handling
	Compressed data handling (source and destination managers)
	I/O suspension
	Progressive JPEG support
	Buffered-image mode
	Abbreviated datastreams and multiple images
	Special markers
	Raw (downsampled) image data
	Really raw data: DCT coefficients
	Progress monitoring
	Memory management
	Memory usage
	Library compile-time options
	Portability considerations
	Notes for MS-DOS implementors

You should read at least the overview and basic usage sections before trying
to program with the library.  The sections on advanced features can be read
if and when you need them.


OVERVIEW
========

Functions provided by the library
---------------------------------

The IJG JPEG library provides C code to read and write JPEG-compressed image
files.  The surrounding application program receives or supplies image data a
scanline at a time, using a straightforward uncompressed image format.  All
details of color conversion and other preprocessing/postprocessing can be
handled by the library.

The library includes a substantial amount of code that is not covered by the
JPEG standard but is necessary for typical applications of JPEG.  These
functions preprocess the image before JPEG compression or postprocess it after
decompression.  They include colorspace conversion, downsampling/upsampling,
and color quantization.  The application indirectly selects use of this code
by specifying the format in which it wishes to supply or receive image data.
For example, if colormapped output is requested, then the decompression
library automatically invokes color quantization.

A wide range of quality vs. speed tradeoffs are possible in JPEG processing,
and even more so in decompression postprocessing.  The decompression library
provides multiple implementations that cover most of the useful tradeoffs,
ranging from very-high-quality down to fast-preview operation.  On the
compression side we have generally not provided low-quality choices, since
compression is normally less time-critical.  It should be understood that the
low-quality modes may not meet the JPEG standard's accuracy requirements;
nonetheless, they are useful for viewers.

A word about functions *not* provided by the library.  We handle a subset of
the ISO JPEG standard; most baseline, extended-sequential, and progressive
JPEG processes are supported.  (Our subset includes all features now in common
use.)  Unsupported ISO options include:
	* Hierarchical storage
	* Lossless JPEG
	* Arithmetic entropy coding (unsupported for legal reasons)
	* DNL marker
	* Nonintegral subsampling ratios
We support both 8- and 12-bit data precision, but this is a compile-time
choice rather than a run-time choice; hence it is difficult to use both
precisions in a single application.

By itself, the library handles only interchange JPEG datastreams --- in
particular the widely used JFIF file format.  The library can be used by
surrounding code to process interchange or abbreviated JPEG datastreams that
are embedded in more complex file formats.  (For example, this library is
used by the free LIBTIFF library to support JPEG compression in TIFF.)


Outline of typical usage
------------------------

The rough outline of a JPEG compression operation is:

	Allocate and initialize a JPEG compression object
	Specify the destination for the compressed data (eg, a file)
	Set parameters for compression, including image size & colorspace
	jpeg_start_compress(...);
	while (scan lines remain to be written)
		jpeg_write_scanlines(...);
	jpeg_finish_compress(...);
	Release the JPEG compression object

A JPEG compression object holds parameters and working state for the JPEG
library.  We make creation/destruction of the object separate from starting
or finishing compression of an image; the same object can be re-used for a
series of image compression operations.  This makes it easy to re-use the
same parameter settings for a sequence of images.  Re-use of a JPEG object
also has important implications for processing abbreviated JPEG datastreams,
as discussed later.

The image data to be compressed is supplied to jpeg_write_scanlines() from
in-memory buffers.  If the application is doing file-to-file compression,
reading image data from the source file is the application's responsibility.
The library emits compressed data by calling a "data destination manager",
which typically will write the data into a file; but the application can
provide its own destination manager to do something else.

Similarly, the rough outline of a JPEG decompression operation is:

	Allocate and initialize a JPEG decompression object
	Specify the source of the compressed data (eg, a file)
	Call jpeg_read_header() to obtain image info
	Set parameters for decompression
	jpeg_start_decompress(...);
	while (scan lines remain to be read)
		jpeg_read_scanlines(...);
	jpeg_finish_decompress(...);
	Release the JPEG decompression object

This is comparable to the compression outline except that reading the
datastream header is a separate step.  This is helpful because information
about the image's size, colorspace, etc is available when the application
selects decompression parameters.  For example, the application can choose an
output scaling ratio that will fit the image into the available screen size.

The decompression library obtains compressed data by calling a data source
manager, which typically will read the data from a file; but other behaviors
can be obtained with a custom source manager.  Decompressed data is delivered
into in-memory buffers passed to jpeg_read_scanlines().

It is possible to abort an incomplete compression or decompression operation
by calling jpeg_abort(); or, if you do not need to retain the JPEG object,
simply release it by calling jpeg_destroy().

JPEG compression and decompression objects are two separate struct types.
However, they share some common fields, and certain routines such as
jpeg_destroy() can work on either type of object.

The JPEG library has no static variables: all state is in the compression
or decompression object.  Therefore it is possible to process multiple
compression and decompression operations concurrently, using multiple JPEG
objects.

Both compression and decompression can be done in an incremental memory-to-
memory fashion, if suitable source/destination managers are used.  See the
section on "I/O suspension" for more details.


BASIC LIBRARY USAGE
===================

Data formats
------------

Before diving into procedural details, it is helpful to understand the
image data format that the JPEG library expects or returns.

The standard input image format is a rectangular array of pixels, with each
pixel having the same number of "component" or "sample" values (color
channels).  You must specify how many components there are and the colorspace
interpretation of the components.  Most applications will use RGB data
(three components per pixel) or grayscale data (one component per pixel).
PLEASE NOTE THAT RGB DATA IS THREE SAMPLES PER PIXEL, GRAYSCALE ONLY ONE.
A remarkable number of people manage to miss this, only to find that their
programs don't work with grayscale JPEG files.

There is no provision for colormapped input.  JPEG files are always full-color
or full grayscale (or sometimes another colorspace such as CMYK).  You can
feed in a colormapped image by expanding it to full-color format.  However
JPEG often doesn't work very well with source data that has been colormapped,
because of dithering noise.  This is discussed in more detail in the JPEG FAQ
and the other references mentioned in the README file.

Pixels are stored by scanlines, with each scanline running from left to
right.  The component values for each pixel are adjacent in the row; for
example, R,G,B,R,G,B,R,G,B,... for 24-bit RGB color.  Each scanline is an
array of data type JSAMPLE --- which is typically "unsigned char", unless
you've changed jmorecfg.h.  (You can also change the RGB pixel layout, say
to B,G,R order, by modifying jmorecfg.h.  But see the restrictions listed in
that file before doing so.)

A 2-D array of pixels is formed by making a list of pointers to the starts of
scanlines; so the scanlines need not be physically adjacent in memory.  Even
if you process just one scanline at a time, you must make a one-element
pointer array to conform to this structure.  Pointers to JSAMPLE rows are of
type JSAMPROW, and the pointer to the pointer array is of type JSAMPARRAY.

The library accepts or supplies one or more complete scanlines per call.
It is not possible to process part of a row at a time.  Scanlines are always
processed top-to-bottom.  You can process an entire image in one call if you
have it all in memory, but usually it's simplest to process one scanline at
a time.

For best results, source data values should have the precision specified by
BITS_IN_JSAMPLE (normally 8 bits).  For instance, if you choose to compress
data that's only 6 bits/channel, you should left-justify each value in a
byte before passing it to the compressor.  If you need to compress data
that has more than 8 bits/channel, compile with BITS_IN_JSAMPLE = 12.
(See "Library compile-time options", later.)


The data format returned by the decompressor is the same in all details,
except that colormapped output is supported.  (Again, a JPEG file is never
colormapped.  But you can ask the decompressor to perform on-the-fly color
quantization to deliver colormapped output.)  If you request colormapped
output then the returned data array contains a single JSAMPLE per pixel;
its value is an index into a color map.  The color map is represented as
a 2-D JSAMPARRAY in which each row holds the values of one color component,
that is, colormap[i][j] is the value of the i'th color component for pixel
value (map index) j.  Note that since the colormap indexes are stored in
JSAMPLEs, the maximum number of colors is limited by the size of JSAMPLE
(ie, at most 256 colors for an 8-bit JPEG library).


Compression details
-------------------

Here we revisit the JPEG compression outline given in the overview.

1. Allocate and initialize a JPEG compression object.

A JPEG compression object is a "struct jpeg_compress_struct".  (It also has
a bunch of subsidiary structures which are allocated via malloc(), but the
application doesn't control those directly.)  This struct can be just a local
variable in the calling routine, if a single routine is going to execute the
whole JPEG compression sequence.  Otherwise it can be static or allocated
from malloc().

You will also need a structure representing a JPEG error handler.  The part
of this that the library cares about is a "struct jpeg_error_mgr".  If you
are providing your own error handler, you'll typically want to embed the
jpeg_error_mgr struct in a larger structure; this is discussed later under
"Error handling".  For now we'll assume you are just using the default error
handler.  The default error handler will print JPEG error/warning messages
on stderr, and it will call exit() if a fatal error occurs.

You must initialize the error handler structure, store a pointer to it into
the JPEG object's "err" field, and then call jpeg_create_compress() to

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成在线播放网站岛国| 色婷婷久久一区二区三区麻豆| 欧美色区777第一页| 伊人婷婷欧美激情| 欧美色区777第一页| 日韩 欧美一区二区三区| 欧美一级二级三级乱码| 久久不见久久见免费视频7| 久久一日本道色综合| 国产99久久久国产精品潘金| 亚洲人成网站影音先锋播放| 欧美日韩欧美一区二区| 青青青爽久久午夜综合久久午夜 | 国产精品丝袜一区| 成人免费看视频| 一区二区三区在线观看视频 | 亚洲一区二区三区在线看| 欧美日韩国产123区| 黑人巨大精品欧美黑白配亚洲| 久久久久久9999| 91久久香蕉国产日韩欧美9色| 肉色丝袜一区二区| 欧美国产精品v| 欧美日韩午夜在线| 成人三级伦理片| 亚洲一区二区三区四区在线免费观看| 欧美巨大另类极品videosbest | 国产一区 二区| 亚洲欧美另类图片小说| 777xxx欧美| 不卡一区二区中文字幕| 日韩电影在线观看一区| 日本一区二区综合亚洲| 在线日韩av片| 国产98色在线|日韩| 亚洲成人一二三| 国产欧美日韩另类视频免费观看| 在线欧美一区二区| 国产成人aaa| 婷婷国产v国产偷v亚洲高清| 国产嫩草影院久久久久| 日韩午夜激情av| 97国产精品videossex| 精品一区二区影视| 性感美女久久精品| 亚洲丝袜制服诱惑| 精品久久国产97色综合| 91久久香蕉国产日韩欧美9色| 韩国精品久久久| 首页国产丝袜综合| 日韩一区在线看| 久久新电视剧免费观看| 欧美高清精品3d| 色呦呦国产精品| 成人午夜av电影| 欧美绝品在线观看成人午夜影视| 丁香婷婷综合网| 国产一区不卡视频| 狠狠色丁香久久婷婷综合丁香| 性欧美疯狂xxxxbbbb| 亚洲色图另类专区| 国产精品不卡一区二区三区| 国产婷婷精品av在线| 精品三级av在线| 日韩免费看网站| 日韩免费一区二区| 日韩欧美国产综合一区| 欧美一区二区三区精品| 欧美猛男男办公室激情| 欧美性猛片aaaaaaa做受| 色又黄又爽网站www久久| 波多野结衣91| 成人av在线影院| 成人18精品视频| 成人国产精品免费观看动漫| 国产成人免费视频精品含羞草妖精| 日本欧美一区二区在线观看| 午夜精品久久久久| 亚洲第一成人在线| 亚洲一区二区在线免费观看视频| 一二三四区精品视频| 亚洲综合丝袜美腿| 午夜婷婷国产麻豆精品| 午夜在线电影亚洲一区| 婷婷综合五月天| 免费看精品久久片| 久久99精品国产麻豆不卡| 久久精品久久精品| 国产成人午夜99999| 不卡大黄网站免费看| 91玉足脚交白嫩脚丫在线播放| 99riav一区二区三区| 欧美亚一区二区| 欧美一级在线观看| 久久久久国产精品免费免费搜索| 欧美激情在线免费观看| 亚洲三级在线免费观看| 偷偷要91色婷婷| 激情成人综合网| 成人avav影音| 欧美午夜在线观看| 日韩女优电影在线观看| 日本一区二区三区久久久久久久久不| 亚洲国产高清不卡| 亚洲激情校园春色| 美女免费视频一区二区| 粉嫩av一区二区三区| 欧美午夜片在线观看| 精品国产伦一区二区三区观看方式 | 亚洲欧美日韩国产成人精品影院| 亚洲综合免费观看高清完整版在线| 五月激情丁香一区二区三区| 精品一区中文字幕| 99re热这里只有精品视频| 欧美日韩电影一区| 国产色综合久久| 亚洲国产美国国产综合一区二区| 久久福利视频一区二区| 菠萝蜜视频在线观看一区| 欧美军同video69gay| 欧美激情在线一区二区三区| 亚洲成人一区二区在线观看| 国产精品综合二区| 欧美日韩视频第一区| 国产欧美一区二区三区在线老狼| 一区二区视频在线看| 九色综合国产一区二区三区| 色综合久久综合| 久久午夜国产精品| 爽好久久久欧美精品| 91影视在线播放| 久久久99精品久久| 性欧美大战久久久久久久久| 不卡一卡二卡三乱码免费网站| 欧美一区二区久久| 亚洲综合一区在线| 丁香婷婷综合激情五月色| 4438亚洲最大| 伊人开心综合网| 国产高清精品久久久久| 日韩欧美一级精品久久| 一区二区三区欧美日| 成人avav在线| 国产日韩欧美a| 麻豆成人久久精品二区三区红| 99久久国产免费看| 久久久久久毛片| 久久精品国产成人一区二区三区| 欧美亚洲禁片免费| 亚洲伦在线观看| 波多野结衣91| 中文字幕亚洲区| 国产精品伊人色| 精品国产免费人成电影在线观看四季| 亚洲国产成人av| 91精品办公室少妇高潮对白| 国产精品久久影院| 国产大片一区二区| 精品999久久久| 精品一二三四在线| 精品久久99ma| 韩日欧美一区二区三区| 亚洲精品一区在线观看| 日韩在线a电影| 欧美群妇大交群的观看方式| 亚洲在线观看免费| 欧美性一级生活| 午夜伦理一区二区| 8v天堂国产在线一区二区| 爽好多水快深点欧美视频| 欧美日韩国产电影| 日韩精品国产精品| 欧美草草影院在线视频| 国产一区二区精品在线观看| 久久免费的精品国产v∧| 国产99久久久久久免费看农村| 国产欧美一区二区三区在线看蜜臀| 国产成人av电影| 亚洲欧美一区二区不卡| 在线观看亚洲精品视频| 丝袜脚交一区二区| 精品久久久久一区二区国产| 国产乱理伦片在线观看夜一区| 久久免费国产精品| 91在线视频18| 天天色天天爱天天射综合| 日韩亚洲电影在线| 国产一区二区三区日韩| 亚洲欧美在线观看| 欧美午夜精品久久久久久孕妇 | 精品国产免费一区二区三区香蕉| 国精产品一区一区三区mba视频| 久久亚洲春色中文字幕久久久| 成人性生交大片免费| 亚洲黄网站在线观看| 91精品国产综合久久久久久久久久 | 久久免费美女视频| 99久久伊人网影院| 香港成人在线视频| 久久精品一区蜜桃臀影院|