一、下载

libpng:http://libmng.com/pub/png/libpng.html

zlib:http://www.zlib.net/

IDE:VS2010

二、编译

将下载的两个zip解压到同一目录下

打开ibpng目录下的projects\vstudio中的工程文件(低版本的VS可以打开projects\visualc71中的工程)。

编译运行,在输出目录(Debug或Realse)中得到输出文件libpng16.dll、libpng16.lib、zlib.lib。

三、创建工程

创建一个工程,右键点击工程名打开Properties(属性)对话框

在C/C++->General(常规)->Additional Include Directories(附加包含目录)中添加libpng目录

在Linker->General(常规)->Additional Library Directories(附加库目录)中添加刚刚生成的lib文件所在的路径

在Linker->Input(输入)->Additional Dependencies(附加依赖项)中添加libpng16.lib、zlib.lib两个文件

四、运行

这里有一个简单的例子,原文:http://zarb.org/~gc/html/libpng.html

/*
* Copyright 2002-2010 Guillaume Cottenceau.
*
* This software may be freely redistributed under the terms
* of the X11 license.
*
*/ #include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h> #define PNG_DEBUG 3
#include <png.h> void abort_(const char * s, ...)
{
va_list args;
va_start(args, s);
vfprintf(stderr, s, args);
fprintf(stderr, "\n");
va_end(args);
abort();
} int x, y; int width, height;
png_byte color_type;
png_byte bit_depth; png_structp png_ptr;
png_infop info_ptr;
int number_of_passes;
png_bytep * row_pointers; void read_png_file(char* file_name)
{
char header[]; // 8 is the maximum size that can be checked /* open file and test for it being a png */
FILE *fp = fopen(file_name, "rb");
if (!fp)
abort_("[read_png_file] File %s could not be opened for reading", file_name);
fread(header, , , fp);
if (png_sig_cmp(header, , ))
abort_("[read_png_file] File %s is not recognized as a PNG file", file_name); /* initialize stuff */
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr)
abort_("[read_png_file] png_create_read_struct failed"); info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr)
abort_("[read_png_file] png_create_info_struct failed"); if (setjmp(png_jmpbuf(png_ptr)))
abort_("[read_png_file] Error during init_io"); png_init_io(png_ptr, fp);
png_set_sig_bytes(png_ptr, ); png_read_info(png_ptr, info_ptr); width = png_get_image_width(png_ptr, info_ptr);
height = png_get_image_height(png_ptr, info_ptr);
color_type = png_get_color_type(png_ptr, info_ptr);
bit_depth = png_get_bit_depth(png_ptr, info_ptr); number_of_passes = png_set_interlace_handling(png_ptr);
png_read_update_info(png_ptr, info_ptr); /* read file */
if (setjmp(png_jmpbuf(png_ptr)))
abort_("[read_png_file] Error during read_image"); row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height);
for (y=; y<height; y++)
row_pointers[y] = (png_byte*) malloc(png_get_rowbytes(png_ptr,info_ptr)); png_read_image(png_ptr, row_pointers); fclose(fp);
} void write_png_file(char* file_name)
{
/* create file */
FILE *fp = fopen(file_name, "wb");
if (!fp)
abort_("[write_png_file] File %s could not be opened for writing", file_name); /* initialize stuff */
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr)
abort_("[write_png_file] png_create_write_struct failed"); info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr)
abort_("[write_png_file] png_create_info_struct failed"); if (setjmp(png_jmpbuf(png_ptr)))
abort_("[write_png_file] Error during init_io"); png_init_io(png_ptr, fp); /* write header */
if (setjmp(png_jmpbuf(png_ptr)))
abort_("[write_png_file] Error during writing header"); png_set_IHDR(png_ptr, info_ptr, width, height,
bit_depth, color_type, PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_write_info(png_ptr, info_ptr); /* write bytes */
if (setjmp(png_jmpbuf(png_ptr)))
abort_("[write_png_file] Error during writing bytes"); png_write_image(png_ptr, row_pointers); /* end write */
if (setjmp(png_jmpbuf(png_ptr)))
abort_("[write_png_file] Error during end of write"); png_write_end(png_ptr, NULL); /* cleanup heap allocation */
for (y=; y<height; y++)
free(row_pointers[y]);
free(row_pointers); fclose(fp);
} void process_file(void)
{
if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB)
abort_("[process_file] input file is PNG_COLOR_TYPE_RGB but must be PNG_COLOR_TYPE_RGBA "
"(lacks the alpha channel)"); if (png_get_color_type(png_ptr, info_ptr) != PNG_COLOR_TYPE_RGBA)
abort_("[process_file] color_type of input file must be PNG_COLOR_TYPE_RGBA (%d) (is %d)",
PNG_COLOR_TYPE_RGBA, png_get_color_type(png_ptr, info_ptr)); for (y=; y<height; y++) {
png_byte* row = row_pointers[y];
for (x=; x<width; x++) {
png_byte* ptr = &(row[x*]);
printf("Pixel at position [ %d - %d ] has RGBA values: %d - %d - %d - %d\n",
x, y, ptr[], ptr[], ptr[], ptr[]); /* set red value to 0 and green value to the blue one */
ptr[] = ;
ptr[] = ptr[];
}
}
} int main(int argc, char **argv)
{
if (argc != )
abort_("Usage: program_name <file_in> <file_out>"); read_png_file(argv[]);
process_file();
write_png_file(argv[]); return ;
}

simple example

若编译错误,需要注意:C语言中,变量需要在函数或语句块的开始声明和定义。

若运行时提示缺少libpng16.dll,则将刚刚生成的libpng16.dll文件复制到工程目录(Debug或Realse)中即可。也可以复制到系统目录Windows\System32(64位操作系统需复制到Windows\SysWOW64)中。

若在执行png_read_info(png_ptr, info_ptr)时,出现错误"Unhandled exception at 0x7c928fea in myApp.exe: 0xC0000005: Access violation writing location 0x00000010.",则引用一段话

I solved my problem...
I found someone on LibPNG's mailing who had the same problem.
The solution is relatively simple: just be sure that the project in which you are using LibPng is compiled with the same "Runtime Library" settings. I think that by default the lib is compiled in "/MD" (multi-threaded DLL) and a lot of projects are single threaded by default. This setting can be found in the project's property under C++/Code Generation (in VC7.1).
So, just insure that the setting are the same for both the library and your project and you should be all set.
This is something that really ought to be mentionned in the documents somewhere (I know that GnuWin32 does not make any documents, but maybe a quick readme with the installer?).
Anyway, thanks!
--Yop83

也就是说,在编译libpng和调用它执行程序时,必须用相同的"Runtime Library"设置。

这里我也碰到了这个问题,是因为编译的时候用的VS2010,创建工程用的VS2008。后来改用为VS2010创建工程,没有问题。

转载请注明出处:
http://www.cnblogs.com/lvrcbl/p/3948641.html

libpng安装与配置(Win7+VS2010)的更多相关文章

  1. 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )

    前言 本文讲解如何在VS 2010开发平台中搭建CUDA开发环境. 当前配置: 系统:WIN7 64位 开发平台:VS 2010 显卡:英伟达G卡 CUDA版本:6.0 若配置不同,请谨慎参考本文. ...

  2. Cocos2d-x win7 + vs2010 配置图文详解

    Cocos2d-x win7 + vs2010 配置图文详解 下载最新版的cocos2d-x.打开浏览器,输入cocos2d-x.org,然后选择Download,本教程写作时最新版本为cocos2d ...

  3. WIN7环境下CUDA7.5的安装、配置和测试(Visual Studio 2010)

    以下基于"WIN7(64位)+Visual Studio 2010+CUDA7.5". 系统:WIN7,64位 开发平台:Visual Studio 2010 显卡:NVIDIA ...

  4. Win7上Git安装及配置过程

    Win7上Git安装及配置过程 文档名称 Win7上Git安装及配置过程 创建时间 2012/8/20 修改时间 2012/8/20 创建人 Baifx 简介(收获) 1.在win7上安装msysgi ...

  5. win7 vs2010 安装cocos2d-x

    http://blog.csdn.net/leoncoder/article/details/12523727 新安装搭建cocos2d-X的跳过这里,看以下红色開始: cocos2d-x删除vs20 ...

  6. Cocos2d-x win7 + vs2010 配置图文详解(亲测)

    下载最新版的cocos2d-x.打开浏览器,输入cocos2d-x.org,然后选择Download,本教程写作时最新版本为cocos2d-1.01-x-0.9.1,具体下载位置如下图: 下载完之后, ...

  7. win7下IIS的安装和配置 图文教程

    转自   http://www.jb51.net/article/29787.htm 最近工作需要IIS,自己的电脑又是Windows7系统,找了下安装的方法,已经安装成功.在博客里记录一下,给需要的 ...

  8. libCURL开源库在VS2010环境下编译安装,配置详解

    libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...

  9. 64位Win7下安装与配置PHP环境【Apache+PHP+MySQL】

    [软件下载] 本安装实例所使用安装文件如图所示: 其中,64位版本的MySQL安装文件mysql-5.5.33-winx64.msi,可直接从官网下载,下载地址:http://dev.mysql.co ...

随机推荐

  1. dos笔记

    MS DOS 命令大全 一.基础命令 1 dir 无参数:查看当前所在目录的文件和文件夹. /s:查看当前目录已经其所有子目录的文件和文件夹. /a:查看包括隐含文件的所有文件. /ah:只显示出隐含 ...

  2. Django 之 ForeignKey、ManyToMany的访问方式

    1.ForeignKey 情况I: from django.db import models class Blog(models.Model): pass class Entry(models.Mod ...

  3. 给iOS开发新手送点福利,简述文本属性Attributes的用法

    给iOS开发新手送点福利,简述文本属性Attributes的用法   文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...

  4. 对​O​p​e​n​C​V​直​方​图​的​数​据​结​构​C​v​H​i​s​t​o​g​r​a​m​的​理​解

    前几天被OpenCV的直方图的数据结构CvHistogram弄得很纠结.上网一搜,也没什么相关的资料.现在有点头绪了,就写点东西,让后面的人好走一些吧. 先来看看CvHistogram的定义: typ ...

  5. spring 定时器Quartz

    一.Quartz是什么 二.  核心接口 scheduler  --- 核心调度器 Job  --- 任务 JobDetail  --- 任务描述 Tigger  --- 触发器 三 . 核心接口之间 ...

  6. 解决linux 无法下载 oracle 官网 java的 安装包

    wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-co ...

  7. Ninject之旅之九:Ninject上下文绑定(附程序下载)

    摘要 既然在插件模型里,每一个服务类型可以被映射到多个实现,绑定方法不用决定要返回哪个实现.因为kernel应该返回所有的实现.然而,上下文绑定是多个绑定场景,在这个场景里,kernel需要根据给定的 ...

  8. js语言精粹读书笔记一

    一.语法 1.

  9. [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World

    来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral ...

  10. C# 设计模式之工厂模式(一)

    写在前面,PS一句:笔记专用,轻拍勿喷,看的不爽绕路前行即可. 一.举栗说明 1.剧情:某银行财务有三位员工,分别为A.B.C三人,主要任务就是去银行取钱,如下: class EmloyeeA: { ...