2010-10-17 2 views
0

У меня есть приложение с большим количеством замаскированного изображения. Для достижения максимальной эффективности я создал эти маскированные изображения на диске, а затем включил их в приложение (они будут загружены по запросу гайкой, не замаскированной на лету, потому что она уже выполнена).Сохранение маскированного UIImage на диск создает неправильное изображение

Я использую этот вид кодирования

NSString *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/Test_%d.png",i]]; 
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/Test_%d.jpg",i]]; 

// Write a UIImage to JPEG with minimum compression (best quality) 
// The value 'image' must be a UIImage object 
// The value '1.0' represents image compression quality as value from 0.0 to 1.0 
[UIImageJPEGRepresentation([self maskImageWithStroke:image withMask:maskImage], 1.0) writeToFile:jpgPath atomically:YES]; 

// Write image to PNG 
[UIImagePNGRepresentation([self maskImageWithStroke:image withMask:maskImage]) writeToFile:pngPath atomically:YES]; 

и она прекрасно работает для моих промежуточных изображений, но не с окончательным.

Вот процесс множественного маски и Блан я использую:

  1. принять изображение и маску его получить maskedImage

  2. Элемент списка взять маску и размер его немного больше: biggerMask

  3. смесь maskedImage и biggermask иметь maskedStrokedImage погладил по biggrMask (Это единственным способом я нашел, чтобы добавить неправильную удара по неправильным маске изображений)

  4. маски maskedStrokedImage с biggerMask, чтобы получить мой окончательный результат .

Проблема заключается в том, что сохранение изображения, полученного на шаге 1, в порядке: у меня есть JPG и PNG с тем, что мне нужно.

Моя цель состоит в том, чтобы сохранить результат шага 4 на диске, но результатом является imahe показывая какую-то часть хода, а остальное белый ...

Любая идея, почему я не могу спасти шаг 4 на диск?

ответ

3

Решения здесь https://devforums.apple.com/thread/67565?tstart=0

использование маска с черной формой на прозрачном фоне и использовать следующий метод. Маскированный inmage отлично сохраняется на диск и может быть импортирован как на экран, он сохраняет свою прозрачность ... grooovy !!!

-(UIImage*)maskImage:(UIImage *)givenImage withClippingMask:(UIImage *)maskImage 
{ 
UIGraphicsBeginImageContext(givenImage.size); 
CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(currentContext, 0, givenImage.size.height); 
CGContextScaleCTM(currentContext, 1.0, -1.0); 
CGRect rectSize = CGRectMake(0, 0, maskImage.size.width, maskImage.size.height); 
CGContextClipToMask(currentContext,rectSize, maskImage.CGImage); 
CGContextDrawImage(currentContext, rectSize, givenImage.CGImage); 
UIImage *imgMasked = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return imgMasked; 
}