Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
libpng错误:读取错误(Visual Studio 2010) 我一直在努力让LIPPNG工作在我的OpenGL C++程序上。我正在尝试加载png的纹理。我已经下载了libpng16源代码,并使用VisualStudio2010构建了它。我已经正确链接了lib文件并包含了png.h文件_C++_Visual Studio 2010_Libpng - Fatal编程技术网

libpng错误:读取错误(Visual Studio 2010) 我一直在努力让LIPPNG工作在我的OpenGL C++程序上。我正在尝试加载png的纹理。我已经下载了libpng16源代码,并使用VisualStudio2010构建了它。我已经正确链接了lib文件并包含了png.h文件

libpng错误:读取错误(Visual Studio 2010) 我一直在努力让LIPPNG工作在我的OpenGL C++程序上。我正在尝试加载png的纹理。我已经下载了libpng16源代码,并使用VisualStudio2010构建了它。我已经正确链接了lib文件并包含了png.h文件,c++,visual-studio-2010,libpng,C++,Visual Studio 2010,Libpng,当我构建我的项目时,libpng将“libpng错误:读取错误”打印到我的控制台,而不打印其他内容。我已经尝试了在internet上找到的所有解决方案,包括更改libpng项目的运行时配置,以匹配我使用它的项目 错误发生在png\u read\u png函数中: FILE * file = fopen(filename,"r"); png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING , NULL ,NULL

当我构建我的项目时,libpng将“libpng错误:读取错误”打印到我的控制台,而不打印其他内容。我已经尝试了在internet上找到的所有解决方案,包括更改libpng项目的运行时配置,以匹配我使用它的项目

错误发生在png\u read\u png函数中:

    FILE * file = fopen(filename,"r");
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING , NULL ,NULL , NULL );
if ( png_ptr == NULL )
{
printf ( "Could not initialize libPNG ’s read struct.\n" ) ;
exit(-1);
}
png_infop png_info_ptr = png_create_info_struct(png_ptr) ;
if ( png_info_ptr == NULL )
{
printf ("Could not initialize libPNG ’s info pointer.\n");
exit ( -1) ;
}
if (setjmp(png_jmpbuf(png_ptr)))
{

  printf ( "LibPNG encountered an error.\n" ) ;
 png_destroy_read_struct(&png_ptr, &png_info_ptr ,NULL );
  exit( -1);
}

png_init_io ( png_ptr , file );
png_read_png ( png_ptr , png_info_ptr , 0 , NULL ) ;
png_uint_32 png_width = 0;
png_uint_32 png_height = 0;
int bits = 0;
int colour_type = 0;
png_get_IHDR ( png_ptr , png_info_ptr , & png_width , & png_height ,& bits , & colour_type ,NULL , NULL , NULL );
const unsigned BITS_PER_BYTE = 8;
unsigned bytes_per_colour = (unsigned)bits/ BITS_PER_BYTE ;
unsigned colours_per_pixel;

if ( colour_type == PNG_COLOR_TYPE_RGB)
{
  colours_per_pixel = 3;
}
else
{
printf ( " Colour types other than RGB are not supported." ) ;
exit ( -1) ;
}
printf ( "png_width = %d, png_height = %d , bits = %d, colour type = %d. \n" , png_width , png_height , bits , colour_type );
unsigned char * data = new unsigned char [ png_width * png_height * colours_per_pixel * bytes_per_colour];
png_bytepp row_pointers = png_get_rows ( png_ptr , png_info_ptr ) ;
unsigned index = 0;
for ( unsigned y = 0; y < png_height ; y ++)
{
  unsigned x = 0;
  while ( x < png_width * colours_per_pixel * bytes_per_colour) {
data [index++] = row_pointers [y][x++];
data [index++] = row_pointers [y][x++];
data [index++] = row_pointers [y][x++];
  }
}
FILE*FILE=fopen(文件名,“r”);
png_structp png_ptr=png_create_read_struct(png_LIBPNG_VER_STRING,NULL,NULL);
如果(png_ptr==NULL)
{
printf(“无法初始化libPNG的读取结构。\n”);
出口(-1);
}
png_infop png_info_ptr=png_create_info_struct(png_ptr);
如果(png\U info\U ptr==NULL)
{
printf(“无法初始化libPNG的信息指针。\n”);
出口(-1);
}
if(setjmp(png_jmpbuf(png_ptr)))
{
printf(“LibPNG遇到错误。\n”);
png_destroy_read_struct(&png_ptr,&png_info_ptr,NULL);
出口(-1);
}
png_init_io(png_ptr,文件);
png_read_png(png_ptr,png_info_ptr,0,NULL);
png_uint_32 png_宽度=0;
png\U uint\U 32 png\U高度=0;
整数位=0;
int color_type=0;
png_get_IHDR(png_ptr、png_info_ptr、png_width、png_height、bits、color_type、NULL、NULL);
常量无符号位每字节=8;
无符号字节每_颜色=(无符号)位/每_字节位;
每像素无符号颜色;
如果(颜色类型==PNG颜色类型RGB)
{
每像素颜色=3;
}
其他的
{
printf(“不支持RGB以外的颜色类型”);
出口(-1);
}
printf(“png_宽度=%d,png_高度=%d,位=%d,颜色类型=%d.\n”,png_宽度,png_高度,位,颜色类型);
无符号字符*数据=新的无符号字符[png_宽度*png_高度*每像素颜色*每颜色字节];
png_bytepp row_pointers=png_get_rows(png_ptr,png_info_ptr);
无符号索引=0;
对于(无符号y=0;y
我已确保传递了正确的文件名,并尝试了多个不同的PNG

在此方面的任何帮助都将不胜感激


感谢您在Windows上必须以二进制模式打开图像文件,否则任何字节序列的出现都会被解释为将转换为单个字节。现在您正在以标准模式打开文件,即文本模式。您可以在二进制模式下打开,方法是在模式字符串中添加“b”,即

FILE * file = fopen(filename,"rb");

非常感谢你!真不敢相信我找不到解决办法。你为我节省了很多时间。