Я пытаюсь создать эффект, который выглядит так, как будто два изображения вплетены друг в друга. Поэтому я масштабировал первое изображение, чтобы быть фоном, и я перебираю второе изображение, используя несколько UIIMageViews поверх фона, чтобы дать мне желаемый вид. Это работает, когда я использую изображения, которые не нужно масштабировать, чтобы они соответствовали размеру моего дисплея, но когда я использую UIGraphics для изменения размера изображения, у меня возникает проблема, когда изображение теряет качество. Любые предложения будут ценны.Как использовать CGImageRef для перебора частей изображения, размер которого был изменен без увеличения пикселизации?
Image 1.jpg 2112 × 2816
Image 2.jpg является 2000 × 3008
UIImage *bgImage = [UIImage imageNamed:@"1.jpg"];
UIImageView *bgView = [[UIImageView alloc] initWithImage:bgImage];
bgView.contentMode = UIViewContentModeScaleToFill;
bgView.frame = CGRectMake(0,0,CGRectGetWidth(self.view.frame), (CGRectGetWidth(self.view.frame)/bgImage.size.width) * bgImage.size.height);
bgView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self.view addSubview:bgView];
UIImage *frontImage = [UIImage imageNamed:@"2.jpg"];
CGSize newSize = CGSizeMake(CGRectGetWidth(self.view.frame), (CGRectGetWidth(self.view.frame)/frontImage.size.width) * frontImage.size.height);
UIGraphicsBeginImageContextWithOptions(newSize, YES, 0.0);
[frontImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
int count = 0;
int varX = 10;
int varY = 10;
CGFloat width = self.view.frame.size.width;
CGFloat height = self.view.frame.size.height;
CGFloat tileWidth = width/varX;
CGFloat tileHeight = height/varY;
for (int x = 0; x < varX; x++) {
for (int y = 0; y < varY; y++) {
NSLog(@"%f, %f, %f, %f",x*tileWidth, y*tileHeight, tileWidth, tileHeight);
CGImageRef scaledRef = CGImageCreateWithImageInRect(scaledImage.CGImage, CGRectMake(x*tileWidth, y*tileHeight, tileWidth, tileHeight));
UIImage *image = [UIImage imageWithCGImage:scaledRef scale:scaledImage.scale orientation:scaledImage.imageOrientation];
UIImageView *bgx = [[UIImageView alloc] initWithImage:image];
CGImageRelease(scaledRef);
bgx.frame = CGRectMake((x*tileWidth), (y*tileHeight), tileWidth, tileHeight);
bgx.backgroundColor = [UIColor yellowColor];
bgx.contentMode = UIViewContentModeTopLeft;
if(count%2==0){
[self.view addSubview:bgx];
}
count++;
}
count++;
}
Непонятно, вы увеличиваете или уменьшаете масштаб. Масштабирование всегда будет ухудшать качество изображения. Для общего масштабирования я использовал эту категорию UIImage в течение многих лет: http://www.catamount.com/forums/viewtopic.php?f=21&t=967&sid=b1096cb20757776f3259c1bd8f7db7ee –