libpng.txt - A description on how to use and modify libpng
libpng version 1.2.19 - August 18, 2007
Updated and distributed by Glenn Randers-Pehrson
<glennrp at users.sourceforge.net>
Copyright (c) 1998-2007 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.
For examples of libpng usage, see the files "example.c", "pngtest.c",
and the files in the "contrib" directory, all of which are included in the
libpng distribution.
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 specification (second edition), November 2003, is available as
a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2003 (E)) at
<http://www.w3.org/TR/2003/REC-PNG-20031110/
The W3C and ISO documents have identical technical content.
The PNG-1.2 specification is available at
<http://www.libpng.org/pub/png/documents/>
The PNG-1.0 specification is available
as RFC 2083 <http://www.libpng.org/pub/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 <http://www.libpng.org/pub/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/>.
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
没有合适的资源?快使用搜索试试~ 我知道了~
Emule电驴源代码
共2610个文件
h:777个
cpp:733个
ico:726个
4星 · 超过85%的资源 需积分: 10 107 下载量 70 浏览量
2008-11-11
22:28:51
上传
评论
收藏 7.81MB RAR 举报
温馨提示
电驴源代码,使用vs2003 c++开发
资源推荐
资源详情
资源评论
收起资源包目录
Emule电驴源代码 (2610个子文件)
Makefile.am 3KB
Makefile.am 3KB
Makefile.am 1KB
x64masm.asm 44KB
gvmat32.asm 27KB
inffas32.asm 16KB
SHA_asm.asm 15KB
MD4_asm.asm 14KB
AUTHORS 148B
veryearth.avi 49KB
InetDownload.avi 11KB
makewin32.bat 1KB
WideCharLowerMap.bin 128KB
wiz1_wat.bmp 151KB
TrayBtnBlue.bmp 11KB
TrayBtnHomestead.bmp 11KB
TrayBtnMetallic.bmp 11KB
ShareFileCount_R.bmp 630B
ShareFileCount_L.bmp 630B
ShareFileCount_M.bmp 246B
ListViewSortDown.bmp 230B
ListViewSortUp2x.bmp 230B
ListViewSortDown2x.bmp 230B
ListViewSortUp.bmp 230B
sqlite3.c 4.01MB
pnggccrd.c 260KB
pngrtran.c 143KB
pngvcrd.c 141KB
pngrutil.c 123KB
pngwutil.c 83KB
deflate.c 64KB
inflate.c 49KB
pngwrite.c 48KB
pngread.c 46KB
pngpread.c 46KB
pngtest.c 46KB
trees.c 44KB
pngset.c 40KB
gzio.c 31KB
example.c 29KB
pngget.c 26KB
png.c 25KB
infback.c 22KB
pngtrans.c 20KB
pngwtran.c 17KB
pngmem.c 17KB
inftrees.c 14KB
crc32.c 13KB
inffast.c 13KB
pngerror.c 9KB
minigzip.c 8KB
pngwio.c 7KB
zutil.c 7KB
pngrio.c 5KB
adler32.c 5KB
compress.c 3KB
uncompr.c 2KB
gvmat32c.c 2KB
ChangeLog 357KB
ChangeLog 43KB
ChangeLog 12KB
configure 390KB
COPYING 25KB
PartFile.cpp 329KB
WebServer.cpp 178KB
emuleDlg.cpp 162KB
Preferences.cpp 159KB
StatisticsDlg.cpp 157KB
sharkbox.cpp 119KB
sharkbox.cpp 119KB
DownloadListCtrl.cpp 115KB
otherfunctions.cpp 115KB
integer.cpp 108KB
DownloadClient.cpp 106KB
integer.cpp 95KB
TreeOptionsCtrl.cpp 94KB
ClientReqSocket.cpp 90KB
Scanner.cpp 83KB
KademliaUDPListener.cpp 78KB
ximatran.cpp 78KB
DownloadQueue.cpp 74KB
SharedFilesCtrl.cpp 74KB
KnownFile.cpp 74KB
FileInfoDialog.cpp 73KB
SearchListCtrl.cpp 70KB
BaseClient.cpp 68KB
emule.cpp 68KB
ximadsp.cpp 66KB
Ed2kUpDownClient.cpp 62KB
PPgTweaks.cpp 62KB
SearchResultsWnd.cpp 62KB
SharedFileList.cpp 57KB
TransferWnd.cpp 56KB
parser.cpp 56KB
IrcMain.cpp 55KB
IrcMain.cpp 55KB
NatThread.cpp 54KB
FileMgr.cpp 54KB
SharedDirsTreeCtrl.cpp 50KB
ArchiveRecovery.cpp 49KB
共 2610 条
- 1
- 2
- 3
- 4
- 5
- 6
- 27
资源评论
- zixiao20002012-09-02代码不错,要是有VC6版本的就更好 了
- wang9845112014-11-04谢谢楼主分享!估计要研究好一阵子了!
- lyy80232016-04-20VS2010运行不了,请问为什么呢?
- libin12011192011-10-27MFC的程序,要慢慢的看了
- huangjuehua2012-12-13mfc代码,100多个类,慢慢看
kongxianyong_gmail
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Win64OpenSSL-3-3-0.exe
- 课高分程设计-基于C++实现的民航飞行与地图简易管理系统-南京航空航天大学
- 航天器遥测数据故障检测系统python源码+文档说明+数据库(课程设计)
- 北京航空航天大学操作系统课设+ppt+实验报告
- 基于Vue+Echarts实现风力发电机中传感器的数据展示监控可视化系统+源代码+文档说明(高分课程设计)
- 基于单片机的风力发电机转速控制源码
- 基于C++实现的风力发电气动平衡监测系统+源代码+测量数据(高分课程设计)
- 毕业设计- 基于STM32F103C8T6 单片机,物联网技术的太阳能发电装置+源代码+文档说明+架构图+界面截图
- 基于 LSTM(长短期记忆)(即改进的循环神经网络)预测风力发电厂中风力涡轮机产生的功率+源代码+文档说明
- 基于stm32f103+空心杯电机+oled按键+运动算法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功