2016-08-12 4 views
-1

У меня есть UIImage и вы хотите его отрезать. У меня есть 4 CGPoints для краев. Я попытался сделать это с помощью маски, но только изменил цвет на прозрачный. Мне нужен совершенно новый UIImage. Кто-нибудь может мне помочь? (в Objective-C)Вырезать изображение с помощью 4 CGPoints

Спасибо!

+0

[CGImageCreateWithImageInRect] (https://developer.apple.com/library//mac/documentation/GraphicsImaging/Reference/CGImage/index.html#//apple_ref/c/func/CGImageCreateWithImageInRect) является вашим другом. – Codo

+0

Да, но у меня нет CGRect всего 4 CGPoints – Lothar

+0

Сделайте четыре точки из прямоугольника или непрямоугольной формы? – Codo

ответ

0

Используйте некоторый код, подобный этому. originalImage - изображение и p0, p1, p2 и p3 - CGPoint s в качестве входных данных. clippedImage является результирующее изображение:

// Create clipping path 
UIBezierPath *path = [UIBezierPath bezierPath]; 
[path moveToPoint:p0]; 
[path addLineToPoint:p1]; 
[path addLineToPoint:p2]; 
[path addLineToPoint:p3]; 
[path closePath]; 

// Get boundary rectangle 
CGRect rect = path.bounds; 

// Create graphis context with translation and clipping 
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 1); 
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -rect.origin.x, -rect.origin.y) 
[path addClip]; 

// draw image 
[originalImage drawAtPoint:CGPointZero]; 

// create resulting image 
UIImage *clippedImage = UIGraphicsGetImageFromCurrentImageContext(); 

// clean up 
UIGraphicsEndImageContext(); 

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

+0

Это работает! Но можете ли вы растянуть более короткую сторону, чтобы результат реального прямоугольника? Как приложение сканера? Теперь его прозрачность. – Lothar

+0

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

+0

Да, извините. Я хочу, чтобы это было как приложение для сканера. Например, ScanBot или TinyScan – Lothar