- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
libpng入门
libpng简单入门目 录1.libpng程序结构31.1 判断文件是否是png文件31.2初始化程序41.3 将创建好的png_struct和png_info的指针和已经打开的png文件相关联。61.4相关读写操作61.5释放空间61.libpng程序结构1.1 判断文件是否是png文件通过文件名来判断文件是否是png文件。这里的fp是指向文件指针的指针。主要是作为出口参数。如果文件成功打开后不关闭文件,等待以后对文件操作结束后再关闭文件。#define PNG_BYTES_TO_CHECK 4int check_if_png(char *file_name, FILE **fp){ char buf[PNG_BYTES_TO_CHECK]; /* Open the prospective PNG file. */ if ((*fp = fopen(file_name, rb)) == NULL) return 0; /* Read in some of the signature bytes */ if (fread(buf, 1, PNG_BYTES_TO_CHECK, *fp) != PNG_BYTES_TO_CHECK) return 0; return(!png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK));}上面的这种方法个人认为比较麻烦,不如在该函数体外面打开文件,只传入一个打开文件的指针。通过该指针做判断,这样相对简单明了,并且有利于后面的一系列操作。但是这样做必须保证传入函数中的是一个文件指针。//check to see if a file is a PNG file.int check_if_png(FILE *fp){ char buf[PNG_BYTES_TO_CHECK] = {0}; /* Open the prospective PNG file. */ if (fp == NULL) { return 0; } /* Read in some of the signature bytes */ if (fread(buf, 1, PNG_BYTES_TO_CHECK, fp) != PNG_BYTES_TO_CHECK) { return 0; } return(!png_sig_cmp((png_byte*)buf, (png_size_t)0, PNG_BYTES_TO_CHECK)); }1.2初始化程序所谓的初始化程序即为png_struct和png_info分配空间。png_struct是关于png文件及其相关属性的结构,并不直接访问,只是用与程序内部的信息传递。png_info则是对于png图片操作的主题。在新版本中主要通过png_set_*和png_get-*系列函数来改变或者得到png_info的信息。详细的操作在后面png图片操作中再说明。png_struct和png_info是使用libpng的基础,必须在对png文件进行操作前为其分配内存。png_info依赖于png_struct创建。 png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, png_voidp user_error_ptr, user_error_fn, user_warning_fn); if (png_ptr == NULL) { fclose(fp); return (ERROR); } /* Allocate/initialize the memory for image information. REQUIRED. */ info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { fclose(fp); png_destroy_read_struct(png_ptr, NULL, NULL); return (ERROR); } /* Set error handling if you are using the setjmp/longjmp method (this is * the normal method of doing things with libpng). REQUIRED unless you * set up your own error handlers in the png_create_read_struct() earlier. */ if (setjmp(png_jmpbuf(png_ptr))) { /* Free all of the memory assoc
文档评论(0)