0

我正在寻找使用 CATiledLayer 在 iOS 设备上显示巨大的 PNG 图像。为此,我需要在客户端将较大的图像拆分为图块(100%、50%、25% 和 12.5%)(不能在服务器端创建图块)。

我可以看到有诸如 libjpeg-turbo 之类的库可以工作,但是这些是用于 JPEG 的,我需要使用 PNG。

有谁知道我可以采用大 PNG(~20Mb)并在设备上从中生成图块的方法?

任何指示或建议将不胜感激!

谢谢!

4

1 回答 1

1

您可以使用内置的 Core Graphics CGDataProviderCreateWithFilename 和 CGI​​mageCreateWithPNGDataProvider 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)。

于 2013-01-04T18:30:55.933 回答