Tag: zlib

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 […]

使用客观的zip解压缩NSData

我刚刚发现Objective Zip我已经阅读了指示,让它在我的项目中build立。 不过,我不知道如何使用它来解压缩一些我想要解压缩的NSData。 我已经看了示例解决scheme,它似乎是在zip文件上执行解压缩代码看起来大致是这样的 ZipFile *unzipFile= [[ZipFile alloc] initWithFileName:filePath mode:ZipFileModeUnzip]; [unzipFile goToFirstFileInZip]; ZipReadStream *read1= [unzipFile readCurrentFileInZip]; 给予或采取一些其他的指示,这是他们如何显示你使用它,他们的示例代码在这里 我想知道如何做同样的事情,但使用NSData? 或者我将不得不将NSData转换成zipFile? 如果是的话,那么performance如何? NSData我想解压缩,如果zlib压缩…任何示例代码将是有益的

通过AVMetadataMachineReadableCodeObject从Aztec条形码读取原始字节会产生意外的结果

我一直在研究一种适用于德国铁路公司(德国铁路公司)使用的特殊条形码的iOS阅读器应用程序。 它是一个连接DSA签名string和zlib瘪负载的Aztec条形码的变体。 当我得知AVMetadataMachineReadableCodeObject没有读取条码中包含的原始字节的公开方法时,我被卡住了,string方法总是乱码zlib压缩数据。 幸运的是, 这个答案给了我正确的方向。 (私人)字节可以通过KVO访问,因为我目前不期望在App Store上分发应用程序,所以这是完美的。 尽pipe我几乎不存在Swift和Objective-C知识,但是我设法使这个工作起来,就像你在示例代码中看到的那样。 但是,存储在NSData的条形码字节与预期的结果不符! 我怀疑我使用的zlib库( DeflateSwift )没有工作,所以我构build了一个testing用例,它工作正常。 我的问题是:我做错了什么? 我是否需要进一步处理原始字节以获得预期结果(请参阅下文)? AVMetadataMachineReadableCodeObject中存储的字节的原始数据是AVMetadataMachineReadableCodeObject ? 任何人都可以指向正确的方向吗? 任何帮助表示赞赏。 这是我的代码(这是一个Swift和Objective-C混搭) if let metadataObject = metadataObjects.first { let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject; let rawReadableObject = readableObject.valueForKeyPath("_internal.basicDescriptor")!["BarcodeRawData"] as? NSData; if let rawBytes = rawReadableObject { let barcodeData = rawBytes; // or use testData instead let barcodeSplit:Int = […]