gpt4 book ai didi

iphone - 如何在 iPhone 3G 上调整大图像的大小而不导致应用程序崩溃?

转载 作者:行者123 更新时间:2023-12-03 21:22:13 31 4
gpt4 key购买 nike

我正在开发一个从网站下载图像以在 iOS 设备上显示的应用程序。该应用程序在 iPad 上运行良好,但在 iPhone 3G(我可以用来测试的唯一其他物理设备)上运行时,加载大图像时会崩溃。正如其他地方所建议的,1024 x 1024 似乎是它能够持续处理的最大尺寸图像。

为了尝试解决此问题,我添加了代码来调整大于 1024 宽或 1024 高的图像大小(代码取自 here ):

if (image.size.width > 1024 || image.size.height > 1024) {
// resize the image
float actualHeight = image.size.height;
float actualWidth = image.size.width;
float imgRatio = actualWidth/actualHeight;
float maxRatio = self.frame.size.width/self.frame.size.height;

if(imgRatio!=maxRatio) {
if(imgRatio < maxRatio) {
imgRatio = self.frame.size.height / actualHeight;
actualWidth = imgRatio * actualWidth;
actualHeight = self.frame.size.height;
} else {
imgRatio = self.frame.size.width / actualWidth;
actualHeight = imgRatio * actualHeight;
actualWidth = self.frame.size.width;
}
}
CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);
UIGraphicsBeginImageContext(rect.size);
[image drawInRect:rect];
imageToDraw = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}

但是,调整非常大的图像(例如,大约 3500 x 2500 像素的图像)的大小仍然会使应用程序崩溃。

是否有任何其他机制可以用来安全地调整如此大的图像的大小,或者其他机制可以用来在不调整大小的情况下显示它们?我无法在应用程序外部平铺图像以在 CATiledLayer 中使用,因为我无法控制图像的来源。

谢谢!

编辑:经过更多调试,我找到了崩溃的根源(请参阅下面的答案)。不过,我仍然欢迎任何关于允许在 iOS 设备上查看非常大的图像而不调整图像大小的更好方法的建议。

最佳答案

我刚刚注意到相关图片与屏幕具有相同的宽高比(崩溃发生时屏幕处于横向)。由于上述代码中该图像的 imgRatio == maxRatio,因此没有发生调整大小。

我将上面的代码修改为如下所示:

if (image.size.width > 1024 || image.size.height > 1024) {
// resize the image
float actualHeight = image.size.height;
float actualWidth = image.size.width;
float imgRatio = actualWidth/actualHeight;
float maxRatio = self.frame.size.width/self.frame.size.height;

if(imgRatio < maxRatio){
imgRatio = self.frame.size.height / actualHeight;
actualWidth = imgRatio * actualWidth;
actualHeight = self.frame.size.height;
}
else{
imgRatio = self.frame.size.width / actualWidth;
actualHeight = imgRatio * actualHeight;
actualWidth = self.frame.size.width;
}
CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);
UIGraphicsBeginImageContext(rect.size);
[image drawInRect:rect];
imageToDraw = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}

现在它适用于之前导致 iPhone 崩溃的图像。

关于iphone - 如何在 iPhone 3G 上调整大图像的大小而不导致应用程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3623747/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com