我希望使用CATiledLayer在iOS设备上显示巨大的PNG图像。为此,我需要在客户端上将较大的图像分割成图块(100%,50%,25%和12.5%)(在服务器端创建图块不是一种选择)。
我可以看到libjpeg-turbo等库可能有效,但这些库适用于JPEG,我需要使用PNG。
有没有人知道我可以采用大型PNG(~20Mb)并在设备上生成瓷砖的方法?
任何指针或建议都将不胜感激!
谢谢!
答案 0 :(得分:1)
您可以使用内置的Core Graphics CGDataProviderCreateWithFilename和CGImageCreateWithPNGDataProvider API打开图像,然后通过执行以下操作创建每个图块:
const CGSize tileSize = CGSizeMake(256, 256);
const CGPoint tileOrigin = ...; // Calculate using current column, row, and tile size.
const CGRect tileFrame = CGRectMake(-tileOrigin.x, -tileOrigin.y, imageSize.width, imageSize.height);
UIGraphicsBeginImageContextWithOptions(tileSize, YES, 1);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, tileFrame, image.CGImage);
UIImage *tileImage = UIGraphicsGetImageFromCurrentImageContext();
[UIImagePNGRepresentation(tileImage) writeToFile:tilePath atomically:YES];
UIGraphicsEndImageContext();
您可能还想查看UIScrollView类参考下引用的相关示例项目(Large Image Downsizing和PhotoScroller)。