Сохранение маскированного UIImage на диск приводит к неправильному изображению - PullRequest
0 голосов
/ 17 октября 2010

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

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

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. Элемент списка возьмите маску и измените ее размер немного больше: largeMask

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

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

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

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

1 Ответ

3 голосов
/ 19 октября 2010

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

используйте маску с черной формой на прозрачном фоне и используйте следующий метод. Замаскированный образ отлично сохраняется на диске и может быть импортирован как есть на экран, он сохраняет свою прозрачность ... 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; 
}
...