我想在UIImage
内的UIImageView
的{{1}}中添加UITableViewCell
。这很好用:
UITableViewController
但是现在,我想要合并两个图像并使用代码I've found here:
cell.imageView.image = [UIImage imageNamed:@"myImage.png"];
这适用于旧的iPhone(320x480)但不适用于视网膜显示屏。在我的项目中,每个图像都有“@ 2x”版本。我分析了代码并对问题进行了解释。
a)在iPhone 3上没有合并(WORKS)
- 图像宽度:28.0
- 图像高度:29.0
- 图像比例:1.0
b)在iPhone 3上进行合并(WORKS)
- 图像宽度:28.0
- 图像高度:29.0
- 图像比例:1.0
c)在iPhone 4上没有合并(WORKS)
- 图像宽度:28.0
- 图像高度:29.0
- 图像比例:2.0
d)在iPhone 4上进行合并(WORKS NOT)
- 图像宽度:56.0
- 图像高度:58.0
- 图像比例:1.0
如您所见,合并将“28.0 / 29.0 / 2.0”转换为“56.0 / 58.0 / 1.0”图像。这个图像在视网膜显示屏上显示得很大。
如何正确合并两张图片以获得2.0的影像?
UIImage *mergedImage = [MyUtils mergeImage:@"myBackImage.png" withImage:@"myFrontImage.png"];
答案 0 :(得分:5)
您需要根据UIImage
尺寸计算合并尺寸,而不是CGImage
尺寸,并且您需要使用图像尺寸的最大尺寸来创建图形上下文。试试这个:
CGSize firstSize = first.size;
CGSize secondSize = second.size;
CGSize mergedSize = CGSizeMake(MAX(firstSize.width, secondSize.width),
MAX(firstSize.height, secondSize.height));
CGFloat mergedScale = MAX(first.scale, second.scale);
UIGraphicsBeginImageContextWithOptions(mergedSize, NO, mergedScale);
[first drawAtPoint:CGPointZero];
[second drawAtPoint:CGPointZero];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;