2011-03-21 1 views
1

Я работаю над приложением для iPhone, где я делаю снимок с помощью камеры. В дальнейшем должно быть возможно нарезать изображение в различных формах - наиболее важных треугольниках. Может ли кто-нибудь дать мне точку в правильном направлении или примерах и т. Д. Я позволил нарезать квадраты, но не треугольники.Срезание UIImage в треугольники в приложении для 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. Позвольте пользователю нарисовать фигуру в изображении uiimageview и заполнить ее черным цветом и создать из нее 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; 

}

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

+0

Что вы используете, чтобы сместить их в квадраты? –

+0

Здесь много хорошего сообщения о разрезе на квадраты, но не треугольники. – Bjarke

+0

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

ответ

1

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

+1

Вам нужно создать изображения в оттенках серого для каждой маски и каждого размера изображения. Если входные изображения всегда имеют одинаковые размеры и существует только ограниченный набор масок, то это решение, безусловно, проще, чем использование обтравочного контура. – DarkDust

+0

Хм, не учитывал размер. Но, видя, что он снимает их с камеры, я полагаю, что они всегда имеют одно и то же разрешение; Я думаю, что изображения в оттенках серого могут легко увеличиваться/уменьшаться для камер с более высоким разрешением. –

+0

Не, если вы хотите острые края, они становятся размытыми при масштабировании. И я не уверен в разрешении камеры, AFAIK разрешение на обратные камеры ниже на iDevices, чем на задней панели. Но если он масштабирует фотографии до одинаковых размеров, тогда изображения маски будут работать хорошо. – DarkDust

0

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

+0

. Это выглядит довольно хорошим предложением - я дам ему попробовать завтра и отчитаться о том, как он прошел – Bjarke

Смежные вопросы