libpng.txt - A description on how to use and modify libpng
libpng version 1.2.5 - October 3, 2002
Updated and distributed by Glenn Randers-Pehrson
<randeg@alum.rpi.edu>
Copyright (c) 1998-2002 Glenn Randers-Pehrson
For conditions of distribution and use, see copyright
notice in png.h.
based on:
libpng 1.0 beta 6 version 0.96 May 28, 1997
Updated and distributed by Andreas Dilger
Copyright (c) 1996, 1997 Andreas Dilger
libpng 1.0 beta 2 - version 0.88 January 26, 1996
For conditions of distribution and use, see copyright
notice in png.h. Copyright (c) 1995, 1996 Guy Eric
Schalnat, Group 42, Inc.
Updated/rewritten per request in the libpng FAQ
Copyright (c) 1995, 1996 Frank J. T. Wojcik
December 18, 1995 & January 20, 1996
I. Introduction
This file describes how to use and modify the PNG reference library
(known as libpng) for your own use. There are five sections to this
file: introduction, structures, reading, writing, and modification and
configuration notes for various special platforms. In addition to this
file, example.c is a good starting point for using the library, as
it is heavily commented and should include everything most people
will need. We assume that libpng is already installed; see the
INSTALL file for instructions on how to install libpng.
Libpng was written as a companion to the PNG specification, as a way
of reducing the amount of time and effort it takes to support the PNG
file format in application programs.
The PNG-1.2 specification is available at <http://www.libpng.org/pub/png>
and at <ftp://ftp.uu.net/graphics/png/documents/>.
The PNG-1.0 specification is available
as RFC 2083 <ftp://ftp.uu.net/graphics/png/documents/> and as a
W3C Recommendation <http://www.w3.org/TR/REC.png.html>. Some
additional chunks are described in the special-purpose public chunks
documents at <ftp://ftp.uu.net/graphics/png/documents/>.
Other information
about PNG, and the latest version of libpng, can be found at the PNG home
page, <http://www.libpng.org/pub/png/>
and at <ftp://ftp.uu.net/graphics/png/>.
Most users will not have to modify the library significantly; advanced
users may want to modify it more. All attempts were made to make it as
complete as possible, while keeping the code easy to understand.
Currently, this library only supports C. Support for other languages
is being considered.
Libpng has been designed to handle multiple sessions at one time,
to be easily modifiable, to be portable to the vast majority of
machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy
to use. The ultimate goal of libpng is to promote the acceptance of
the PNG file format in whatever way possible. While there is still
work to be done (see the TODO file), libpng should cover the
majority of the needs of its users.
Libpng uses zlib for its compression and decompression of PNG files.
Further information about zlib, and the latest version of zlib, can
be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
The zlib compression utility is a general purpose utility that is
useful for more than PNG files, and can be used without libpng.
See the documentation delivered with zlib for more details.
You can usually find the source files for the zlib utility wherever you
find the libpng source files.
Libpng is thread safe, provided the threads are using different
instances of the structures. Each thread should have its own
png_struct and png_info instances, and thus its own image.
Libpng does not protect itself against two threads using the
same instance of a structure. Note: thread safety may be defeated
by use of some of the MMX assembler code in pnggccrd.c, which is only
compiled when the user defines PNG_THREAD_UNSAFE_OK.
II. Structures
There are two main structures that are important to libpng, png_struct
and png_info. The first, png_struct, is an internal structure that
will not, for the most part, be used by a user except as the first
variable passed to every libpng function call.
The png_info structure is designed to provide information about the
PNG file. At one time, the fields of png_info were intended to be
directly accessible to the user. However, this tended to cause problems
with applications using dynamically loaded libraries, and as a result
a set of interface functions for png_info (the png_get_*() and png_set_*()
functions) was developed. The fields of png_info are still available for
older applications, but it is suggested that applications use the new
interfaces if at all possible.
Applications that do make direct access to the members of png_struct (except
for png_ptr->jmpbuf) must be recompiled whenever the library is updated,
and applications that make direct access to the members of png_info must
be recompiled if they were compiled or loaded with libpng version 1.0.6,
in which the members were in a different order. In version 1.0.7, the
members of the png_info structure reverted to the old order, as they were
in versions 0.97c through 1.0.5. Starting with version 2.0.0, both
structures are going to be hidden, and the contents of the structures will
only be accessible through the png_get/png_set functions.
The png.h header file is an invaluable reference for programming with libpng.
And while I'm on the topic, make sure you include the libpng header file:
#include <png.h>
III. Reading
We'll now walk you through the possible functions to call when reading
in a PNG file sequentially, briefly explaining the syntax and purpose
of each one. See example.c and png.h for more detail. While
progressive reading is covered in the next section, you will still
need some of the functions discussed in this section to read a PNG
file.
Setup
You will want to do the I/O initialization(*) before you get into libpng,
so if it doesn't work, you don't have much to undo. Of course, you
will also want to insure that you are, in fact, dealing with a PNG
file. Libpng provides a simple check to see if a file is a PNG file.
To use it, pass in the first 1 to 8 bytes of the file to the function
png_sig_cmp(), and it will return 0 if the bytes match the corresponding
bytes of the PNG signature, or nonzero otherwise. Of course, the more bytes
you pass in, the greater the accuracy of the prediction.
If you are intending to keep the file pointer open for use in libpng,
you must ensure you don't read more than 8 bytes from the beginning
of the file, and you also have to make a call to png_set_sig_bytes_read()
with the number of bytes you read from the beginning. Libpng will
then only check the bytes (if any) that your program didn't read.
(*): If you are not using the standard I/O functions, you will need
to replace them with custom functions. See the discussion under
Customizing libpng.
FILE *fp = fopen(file_name, "rb");
if (!fp)
{
return (ERROR);
}
fread(header, 1, number, fp);
is_png = !png_sig_cmp(header, 0, number);
if (!is_png)
{
return (NOT_PNG);
}
Next, png_struct and png_info need to be allocated and initialized. In
order to ensure that the size of these structures is correct even with a
dynamically linked libpng, there are functions to initialize and
allocate the structures. We also pass the library version, optional
pointers to error handling functions, and a pointer to a data struct for
use by the error functions, if necessary (the pointer and functions can
be NULL if the default error handlers are to be used). See the section
on Changes to Libpng below regarding the old initialization functions.
The structure allocation functions quietly return NULL if they fail to
create the structure, so your application should check for that.
png_structp png_ptr = png_create_read_struct
(PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
CxImage类库是一 个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage, PaintLib等等,它们可谓是功能强大,齐全,没必要用其它的类库。但我要说,这些类库基本上没有免费的,使用这些类库,你要被这样那样的许可协议所 束缚。在这点上,CxImage类库是完全免费的。另外,在使用上述类库时,你会遇到重重麻烦。因为它们大部分是平台无关的,且用C语言写成,有的还夹杂 着基本的C++ wrapper和成堆德编译选项的声明需要你去处理。而CxImage类库在这方面做得很好。还有让我最看好的,就是作者完全公开了源代码。相对于那些封 装好的图形库和GDI+来说,这一点使我们可以进一步学习各种编解码技术,而不再浮于各种技术的表面。 CxImage是一个可以用于MFC 的C++类,可以打开,保存,显示,转换各种格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。可以实现BMP<->JPG,PNG <>TIFF格式等等的转换。 既可以实现图像文件的类型转换,也可以实现在内存图像数据的类型转换,并且使用很方便。 它的作者是: Davide Pizzolato ,主页: http://www.xdp.it/ 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/king_lu/archive/2007/09/26/1802215.aspx
资源推荐
资源详情
资源评论
收起资源包目录
XIMAGE XIMAGE (499个子文件)
ANNOUNCE 1KB
demo.aps 142KB
CxImgLib.bbs 615B
jasper.bbs 65B
ico2.bin 2KB
bg.bmp 3KB
Toolbar.bmp 3KB
toolbar1.bmp 2KB
pnggccrd.c 234KB
pngrtran.c 143KB
pngvcrd.c 143KB
pngrutil.c 91KB
jbig.c 91KB
tif_ojpeg.c 83KB
pngwutil.c 82KB
fax3sm_winnt.c 79KB
jpc_enc.c 72KB
tif_getimage.c 64KB
jpc_dec.c 62KB
deflate.c 55KB
jas_icc.c 50KB
jquant2.c 49KB
jpc_cs.c 48KB
pngwrite.c 48KB
pngread.c 46KB
inflate.c 46KB
pngpread.c 45KB
trees.c 44KB
tif_fax3.c 42KB
jdmarker.c 42KB
jmemmgr.c 41KB
tif_jpeg.c 41KB
jas_image.c 40KB
tif_luv.c 39KB
tif_dirread.c 38KB
pngset.c 37KB
jas_cm.c 37KB
tif_dir.c 36KB
tif_pixarlog.c 35KB
jpc_qmfb.c 33KB
jas_stream.c 32KB
jquant1.c 31KB
gzio.c 31KB
tif_dirwrite.c 30KB
jchuff.c 28KB
jpc_t1enc.c 28KB
jpc_t1dec.c 28KB
jas_iccdata.c 28KB
tif_lzw.c 27KB
pngget.c 26KB
jp2_cod.c 26KB
tcd.c 26KB
jbig_tab.c 25KB
jcphuff.c 25KB
jdcoefct.c 25KB
t1.c 24KB
png.c 23KB
jdhuff.c 23KB
infback.c 22KB
j2k.c 22KB
jpc_t2cod.c 22KB
jcparam.c 21KB
mif_cod.c 21KB
jdphuff.c 21KB
jdmainct.c 20KB
jpc_t2enc.c 20KB
jpc_tsfb.c 20KB
pngtrans.c 20KB
jcmaster.c 20KB
jdmaster.c 20KB
tif_write.c 20KB
jp2_dec.c 19KB
jcsample.c 19KB
jpc_t2dec.c 19KB
tif_read.c 18KB
jcmarker.c 17KB
pngwtran.c 17KB
jdsample.c 16KB
jccoefct.c 16KB
tif_print.c 16KB
pnm_dec.c 16KB
pnm_enc.c 16KB
pngmem.c 16KB
jpc_bs.c 16KB
tif_dirinfo.c 16KB
bmp_dec.c 16KB
jpg_enc.c 15KB
jccolor.c 15KB
jidctint.c 15KB
jpc_t1cod.c 15KB
tstcodec.c 15KB
jp2_enc.c 14KB
bmp_enc.c 14KB
jas_seq.c 14KB
jpc_mqenc.c 14KB
jctrans.c 14KB
jdmerge.c 14KB
pi.c 14KB
jidctred.c 14KB
ras_dec.c 14KB
共 499 条
- 1
- 2
- 3
- 4
- 5
Meteor_Code
- 粉丝: 49
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页