图像的高度太大,无法显示

时间:2014-06-06 13:29:59

标签: ios objective-c uiimageview uiimage

请帮我学习objective-c!

我的程序获取整个UIWebView内容的屏幕截图,保存并应该显示它。 它工作正常,直到它遇到一个很长的页面。看起来像页面的高度是一个问题,因为它显示5 Mb截图很好,只要它们不是太长(没有太多高度),但是1Mb但是超长的截图不显示在UIImageView中一点都不它显示了UIImageView的背景,就是这样。

我的代码,尝试将页面的大小调整为最大高度为2000,并且最小为整个屏幕大小的75%。宽高比是次要的。但是,图像仍然缺失:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGFloat divider = 2;
    CGFloat imageDisplayLimit = 2000;
    CGFloat width = _image.size.width;
    CGFloat height = _image.size.height;
//determine the leading parameter (just in case of a fat-S image)
    if (width > imageDisplayLimit || height > imageDisplayLimit) {
        if (width > height) {
            divider = width / imageDisplayLimit;
        } else {
            divider = height / imageDisplayLimit;
        }
    }

    //don't let it get too fat
    CGFloat minimumWidth = self.view.frame.size.width / 1.5;
    if (width / divider < minimumWidth) {
        width = minimumWidth;
    } else {
        width /= divider;
    }

    //don't let it get too long
    CGFloat minimumHeight = self.view.frame.size.height / 1.5;
    if (height / divider < minimumHeight) {
        height = minimumHeight;
    } else {
        height /= divider;
    }

    _imageView = [[UIImageView alloc] initWithImage:_image];
    _imageView.frame = CGRectMake(0, 0, width, height);
//now just to make it obvious - red background
    _imageView.backgroundColor = [UIColor redColor];
    _imageView.frame = CGRectMake(0, 0, _image.size.width / divider, _image.size.height / divider);
    _imageView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin);
    _imageView.contentMode = UIViewContentModeScaleAspectFill;

    [_scrollView addSubview:_imageView];

    _scrollView.contentSize = _imageView.bounds.size;
    _scrollView.delegate = self;
//just to make scroll visible during debug
    _scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    ...

此时没有显示,但可滚动视图上的红色背景。

我正在研究objective-c并且不知道很多,但我现在试图找到一个解决方案2天。请救救我!

我猜是方面填充或适合不做任何事只是因为它们实际上并没有改变图像 - 只是一个显示器。我真正应该使用的(IMHO)是UIGraphicsBeginImageContext。但我根本不知道如何缩小到最大2000像素。我可以使用

来剪切它
 UIGraphicsBeginImageContext(someSizeWith2000Height)
 [originalImage drawInRect:CGRectMake(resized_x, resized_y, resized_width, resized_height)];    
UIImage* resized_image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

或类似的东西,但我不想削减它 - 只是缩小(或拉伸,如果太短)。

有什么想法吗?我已经没用了。

1 个答案:

答案 0 :(得分:0)

好吧,既然stackoverflow的系统太棒了,它就会在桌面之间丢下问题而没有人能找到它们,我不得不放弃这个问题,而我能想出的唯一解决方案就是替换UIImageView UIWebView作为图像显示视图。它使图像以可怕的质量显示,但至少显示它。

如果有人偶然发现这个问题,请帮助.... :)