2013-07-03 3 views
6

Я хочу замаскировать изображение, передав другое изображение в виде маски. Я могу замаскировать изображение, но получившееся изображение выглядит не очень хорошо. Он зазубрен на границах.IOS: маскировка изображения, сохраняющего коэффициент масштабирования сетчатки на счете

Я думаю, проблема связана с графикой сетчатки. Свойство масштаба для двух изображений отличается от:

  1. Изображение, из которого я хочу замаскировать, имеет масштабное значение 1. Это изображение обычно имеет разрешение более 1000x1000 пикселей.
  2. Изображение, в соответствии с которым я хочу получить результирующее изображение (только с черно-белыми цветами), имеет масштабное значение 2. Это изображение, как правило, имеет разрешение 300x300 пикселей.

Полученное изображение имеет значение шкалы, равное 1.

кода я использую:

+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { 

CGImageRef maskRef = maskImage.CGImage; 

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
            CGImageGetHeight(maskRef), 
            CGImageGetBitsPerComponent(maskRef), 
            CGImageGetBitsPerPixel(maskRef), 
            CGImageGetBytesPerRow(maskRef), 
            CGImageGetDataProvider(maskRef), NULL, false); 


CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); 
CGImageRelease(mask); 
UIImage *maskedImage = [UIImage imageWithCGImage:masked ]; 
CGImageRelease(masked); 
return maskedImage; 
} 

Как я могу получить замаскированное изображение, которое следует сетчатка масштаба?

+0

Вы должны рассмотреть проверить ответ, если он вам помог. – kokluch

+0

Я задал этот вопрос 3 июля 2013 года, и первым ответом было 8 января. Между тем я переехал в разные проекты, и я не проверял, помогал ли ответ или нет, и если я не уверен, то как я могу принять любой ответ. Я просто хочу закрыть вопрос, но не знаю, как это сделать. –

+0

Не так сложно найти ... – kokluch

ответ

5

У меня была та же проблема. Похоже, что эта линия игнорирует масштабный коэффициент.

UIImage *maskedImage = [UIImage imageWithCGImage:masked]; 

Вы должны нарисовать изображение самостоятельно. Замените его следующим образом:

UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); 

CGContextDrawImage(context, rect, masked); 

UIImage * maskedImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

Работы отлично у меня.

EDIT

ИЛИ

UIImage * maskedImage = [UIImage imageWithCGImage:masked 
              scale:[[UIScreen mainScreen] scale] 
             orientation:UIImageOrientationUp]; 
4

Вы можете сделать

UIImage * maskedImage = [UIImage imageWithCGImage:masked scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp];