Mos*_*ano 10 iphone cocoa-touch objective-c uiimageview ios
我试图在下载时显示JPEG图像,使用部分数据,类似于许多网络浏览器或facebook应用程序.
有一个低质量的图像版本(只是数据的一部分),然后以完整的质量显示完整的图像.
这在视频中最佳显示
我跟着这个问题:
但我得到的只是一个imageview,正在呈现数据保持,第一个没有低质量版本,没有真正的渐进式下载和渲染.
任何人都可以共享一个代码段或指向我可以找到更多关于如何在iOS应用程序中实现这些信息的信息?
尝试过此链接,例如显示JPEG信息,它将图像标识为渐进式
我使用了正确的代码序列
-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
/// Append the data
[_dataTemp appendData:data];
/// Get the total bytes downloaded
const NSUInteger totalSize = [_dataTemp length];
/// Update the data source, we must pass ALL the data, not just the new bytes
CGImageSourceUpdateData(_imageSource, (CFDataRef)_dataTemp, (totalSize == _expectedSize) ? true : false);
/// We know the expected size of the image
if (_fullHeight > 0 && _fullWidth > 0)
{
[_imageView setImage:[UIImage imageWithCGImage:image]];
CGImageRelease(image);
}
}
Run Code Online (Sandbox Code Playgroud)
但是代码只显示加载完成后的图像,其他图像会在下载时显示,但只有从上到下,没有低质量的版本,然后逐渐添加细节,就像浏览器一样.
这是我有一段时间感兴趣的主题:似乎没有办法使用Apple的API做你想做的事情,但如果你能投入时间,你可能会让它发挥作用.
首先,您需要一个JPEG解码库:libjpeg或libjpeg-turbo.然后,您需要将其集成到可以与Objective-C一起使用的内容中.有使用这个库,一个开源项目PhotoScrollerNetwork,使用利用涡轮库"对飞",因为它们下载到解码非常大的JPEG文件,因此他们可以平移和缩放(PhotoScroller是苹果公司的项目,不摇摄和缩放,但它需要预先平铺的图像).
虽然上述项目并不完全符合您的要求,但您应该能够解除大部分libjpeg-turbo接口以解码渐进式图像并在接收到时返回低质量图像.看起来您的图像非常大,否则几乎不需要渐进式图像,因此您也可以找到上述使用项目的平移/缩放功能.
PhotoScrollerNetwork的一些用户请求支持渐进式图像,但似乎在网络上几乎没有使用它们.
编辑:第二个想法:如果它是你的网站,你将用于出售渐进式图像(我认为这是因为通常很少找到),你可以采取完全不同的机智.
在这种情况下,您将构建一个自己设计的二进制文件 - 一个在其中有4个图像的文件.前四个字节将提供其后的数据长度(并且每个后续图像将使用相同的4字节前缀).然后,在iOS端,随着下载开始,一旦你获得第一个图像的完整字节,你可以使用它们来构建一个小的低分辨率UIImage,并在接收下一个图像时显示它.当下一个完全到达时,您将使用较新的较高分辨率图像更新低分辨率图像.它可能你可以使用拉链容器,并在飞行减压 - 不是100%肯定.在任何情况下,以上都是您的问题的标准解决方案,并将提供与libjpeg几乎相同的性能,而工作少得多.
| 归档时间: |
|
| 查看次数: |
5504 次 |
| 最近记录: |