Tag: libpng

iOS和libpng上的PNG优化

我们在iOS应用程序中使用了一些旧代码,这些代码使用纹理图集和OpenGL渲染了简单的3D图像。 整个应用程序是使用最新的Swift版本编写的,但是使用OpenGL的部分是在Objective-C中编写的。 我不了解Objective-C,但这是有很好的理由-用这种语言编写的代码必须是我见过的可读性最低的代码。 幸运的是,一年多来我不需要接触该代码。 本周,企业提出了更新3D图像外观的要求。 我获得了PNG格式的新纹理地图集,我认为这将是在公园里散步-我仍然不需要触摸代码,我将一个地图集交换为另一个。 旧的纹理地图集文件是常规的PNG文件,但是由于某些未知原因(对我而言),它们具有怪异的扩展名。 在内部,文件是由libpng读取的,因此没有理由使用不同的扩展名。 我一直试图了解(可能的更改,如果可以使事情变得更容易)对我而言尚不清楚,因此我添加了具有常规PNG扩展名的新地图集文件,而不是将其重命名为旧版代码中使用的自定义文件。 这就是我遇到最初根本无法理解的问题的方式。 libpng无法读取抱怨CgBI chunk的新文件。 问题在于Xcode优化了默认情况下不属于Assets的所有PNG文件,并将它们转换为Apple的非标准PNG格式-CgBI(http://iphonedevwiki.net/index.php/CgBI_file_format)。 这种格式增加了libpng无法识别的额外标头。 这解释了为什么我之前的某人决定使用一些奇怪的自定义扩展名-以避免Xcode对文件运行优化。 这是解决问题的一种方法,但是还有另一种方法。 将任何PNG文件添加到Assets之外的项目后,“ Build Settings就会出现一组新的选项: 以上是默认状态。 为了使libpng可以正常工作,我必须将两个选项都设置为no 。 然后,它开始运行良好。 一些有趣的链接: https://developer.apple.com/library/archive/qa/qa1681/_index.html https://imageoptim.com/xcode.html

libpng错误:读取错误

我有一些PNG图像。 我打开它。 比我把它保存到文件。 而当我尝试打开保存的图像,我有这个问题。 libpng错误:读取 png_read_rows 错误 这是写代码: png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); png_infop info_ptr = png_create_info_struct(png_ptr); //created png struct setjmp(png_jmpbuf(png_ptr)) //signed png_init_io(png_ptr, file); png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGBA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); //set header unsigned char * buffer = (unsigned char*)malloc(4 *width * height); // created buffer unsigned char ** row_pointers = […]

iOS上的PNGvalidation

在iOS上编写地图应用程序,使用OpenStreetMap图块。 地图平铺图像是asynchronous下载并存储在字典中,或者保存在SQLite数据库中。 偶尔,无论出于何种原因,在尝试渲染地图平铺图像时,出现以下错误: ImageIO: <ERROR> PNGinvalid distance too far back 这会导致令人讨厌的黑色方块出现在我的地图上。 这是发生这种情况的一段代码: NSData *imageData = [TileDownloader RetrieveDataAtTileX:(int)tilex Y:(int)tiley Zoom:(int)zoomLevel]; if (imageData != nil) { NSLog(@"Obtained image data\n"); UIImage *img = [[UIImage imageWithData:imageData] retain]; // Perform the image render on the current UI context. // ERROR OCCURS BETWEEN PUSH AND POP UIGraphicsPushContext(context); [img drawInRect:[self rectForMapRect:mapRect] blendMode:kCGBlendModeNormal […]