Нарезка UIImage на треугольники в приложении для iPhone - PullRequest
1 голос
/ 21 марта 2011

Я работаю над приложением для iPhone, где я делаю снимок с помощью камеры.В дальнейшем должно быть возможно нарезать изображение в различные формы - самые важные треугольники.Кто-нибудь может дать мне точку в правильном направлении или в примерах и т. Д. Я дал возможность разрезать на квадраты, но не на треугольники.

(Обновлено). Для создания квадратов срезов я использовал следующие фрагменты кода

CGRect ClippedRect= CGRectMake(0, 150, 320.0, 230.0);//example numbers
CGImageRef imageRef = CGImageCreateWithImageInRect([OriginalUIImage CGImage], ClippedRect);
UIImage *resultUIImage=[[UIImage alloc]initWithCGImage:imageRef];

Вся помощь приветствуется

С уважением

РЕШЕНО:

Я пошел с методом маскировки uiimage.Итак, стратегия такова: 1. Сделайте снимок с камеры и масштабируйте.2. Позвольте пользователю нарисовать фигуру в представлении uiimage и залейте его черным цветом и создайте из него UIImage.3. Маскируйте изображение с камеры созданным пользователем изображением.Для маскировки изображения я использую следующий метод из http://www.developers -life.com / resize-and-mask-an-image.html

- (UIImage*) maskImage:(UIImage *)image  {

 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

 UIImage *maskImage = [UIImage imageNamed:@"mask.png"];
 CGImageRef maskImageRef = [maskImage CGImage];

 // create a bitmap graphics context the size of the image
 CGContextRef mainViewContentContext = CGBitmapContextCreate (NULL, maskImage.size.width, maskImage.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);


 if (mainViewContentContext==NULL)
      return NULL;

 CGFloat ratio = 0;

 ratio = maskImage.size.width/ image.size.width;

 if(ratio * image.size.height < maskImage.size.height) {
      ratio = maskImage.size.height/ image.size.height;
 } 

 CGRect rect1  = {{0, 0}, {maskImage.size.width, maskImage.size.height}};
 CGRect rect2  = {{-((image.size.width*ratio)-maskImage.size.width)/2 , -((image.size.height*ratio)-maskImage.size.height)/2}, {image.size.width*ratio, image.size.height*ratio}};


 CGContextClipToMask(mainViewContentContext, rect1, maskImageRef);
 CGContextDrawImage(mainViewContentContext, rect2, image.CGImage);


 // Create CGImageRef of the main view bitmap content, and then
 // release that bitmap context
 CGImageRef newImage = CGBitmapContextCreateImage(mainViewContentContext);
 CGContextRelease(mainViewContentContext);

 UIImage *theImage = [UIImage imageWithCGImage:newImage];

 CGImageRelease(newImage);

 // return the image
 return theImage;

}

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Попробуйте что-то вроде этого:
http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html
Просто сделайте черное изображение в качестве маски и примените его к изображению, если я правильно понял это объяснение.

0 голосов
/ 21 марта 2011

Вы должны быть в состоянии использовать этот подход: создайте новое изображение, используя UIGraphicsBeginImageContextWithOptions (вы также можете использовать эквивалент CoreGraphics, но это намного больше работы), затем создайте путь Безье нужной фигуры, вызовите [yourBezierPath addClip] и затем нарисуйте свое изображение в этом контексте. Затем вы можете получить полученное изображение, используя UIGraphicsGetImageFromCurrentImageContext . Обязательно позвоните UIGraphicsEndImageContext() впоследствии. См. этот вопрос для создания изображения с UIGraphicsBeginImageContextWithOptions.

...