Я хочу добавить UIImage
в UIImageView
из UITableViewCell
внутри UITableViewController
.Это прекрасно работает:
cell.imageView.image = [UIImage imageNamed:@"myImage.png"];
Но теперь я хочу объединить два изображения и использовать код Я нашел здесь :
UIImage *mergedImage = [MyUtils mergeImage:@"myBackImage.png" withImage:@"myFrontImage.png"];
Это работает оченьхорошо со старым iPhone (320x480), но не на дисплее сетчатки.В моем проекте есть "@ 2x" -версии каждого изображения.Я анализирую код и получаю объяснение проблемы.
а) на iPhone 3 без объединения (РАБОТЫ)
- ширина изображения: 28,0
- высота изображения: 29,0
- масштаб изображения: 1,0
б) на iPhone 3 со слиянием (РАБОТЫ)
- ширина изображения: 28,0
- высота изображения: 29,0
- масштаб изображения: 1,0
с)на iPhone 4 без слияния (РАБОТАЕТ)
- ширина изображения: 28,0
- высота изображения: 29,0
- масштаб изображения: 2,0
d) на iPhone 4 со слиянием (НЕ РАБОТАЕТ)
- ширина изображения: 56,0
- высота изображения: 58,0
- масштаб изображения: 1,0
Как видите, объединение преобразует "28,0 / 29,0 / 2,0" в "56,0 /58,0 / 1,0 "изображение.И эти изображения становятся большими на дисплее сетчатки.
Как правильно объединить два изображения, чтобы получить изображение в масштабе 2,0?
Приложение: код, который я использую для объединения двух изображений (отсюда)
+ (UIImage*)mergeImage:(UIImage*)first withImage:(UIImage*)second
{
// get size of the first image
CGImageRef firstImageRef = first.CGImage;
CGFloat firstWidth = CGImageGetWidth(firstImageRef);
CGFloat firstHeight = CGImageGetHeight(firstImageRef);
// get size of the second image
CGImageRef secondImageRef = second.CGImage;
CGFloat secondWidth = CGImageGetWidth(secondImageRef);
CGFloat secondHeight = CGImageGetHeight(secondImageRef);
// build merged size
CGSize mergedSize = CGSizeMake(MAX(firstWidth, secondWidth), MAX(firstHeight, secondHeight));
// capture image context ref
UIGraphicsBeginImageContext(mergedSize);
//Draw images onto the context
[first drawInRect:CGRectMake(0, 0, firstWidth, firstHeight)];
[second drawInRect:CGRectMake(0, 0, secondWidth, secondHeight)];
// assign context to new UIImage
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// end context
UIGraphicsEndImageContext();
return newImage;
}