У меня есть замкнутый путь, определенный как CGPath (фактически, CGMutablePath).Ограничить цвет ожога внутри CGPath
Я хочу сжечь конкретную область UIImage, определенную по пути. Я играю в Core Core, но в настоящее время моими единственными параметрами являются цвет оттенка прямоугольной области, определенной CGRect, а не дорогой.
Может ли кто-нибудь указать мне правильное направление?
--update
Используя помощь Rob мне удалось повернуть изображение я получил от камеры 90 градусов, чтобы она правильно отображаться в UIImageView ..
Единственная проблема, я оставил это PATH Мне нужно рисовать все еще на 90 градусов и вне шкалы. Используемый в настоящее время код выглядит следующим образом:
- (UIImage*)applyColorFillWithPath:(CGMutablePathRef) path withColor:(UIColor*)color {
CGFloat targetWidth = self.size.width;
CGFloat targetHeight = self.size.height;
CGImageRef imageRef = [self CGImage];
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);
if (bitmapInfo == kCGImageAlphaNone) {
bitmapInfo = kCGImageAlphaNoneSkipLast;
}
CGContextRef context;
if (self.imageOrientation == UIImageOrientationUp || self.imageOrientation == UIImageOrientationDown) {
//UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));
context = CGBitmapContextCreate(NULL, targetWidth, targetHeight, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);
} else {
//UIGraphicsBeginImageContext(CGSizeMake(targetHeight, targetWidth));
context = CGBitmapContextCreate(NULL, targetHeight, targetWidth, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);
}
// set the fill color
//[color setFill];
if (self.imageOrientation == UIImageOrientationLeft) {
CGContextRotateCTM(context, radians(90));
CGContextTranslateCTM (context, 0, -targetHeight);
} else if (self.imageOrientation == UIImageOrientationRight) {
CGContextRotateCTM (context, radians(-90));
CGContextTranslateCTM (context, -targetWidth, 0);
} else if (self.imageOrientation == UIImageOrientationUp) {
// NOTHING
} else if (self.imageOrientation == UIImageOrientationDown) {
CGContextTranslateCTM (context, targetWidth, targetHeight);
CGContextRotateCTM (context, radians(-180));
}
CGContextDrawImage(context, CGRectMake(0, 0, targetWidth, targetHeight),imageRef);
CGContextBeginPath(context);
CGContextAddPath(context, path);
CGContextSaveGState(context);
CGContextClip(context);
CGContextSetBlendMode(context, kCGBlendModeNormal);
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, CGPathGetBoundingBox(path));
CGContextRestoreGState(context);
// Turn the bitmap context into a UIImage.
CGImageRef cgImage = CGBitmapContextCreateImage(context);
CGContextRelease(context);
UIImage *coloredImg = [UIImage imageWithCGImage:cgImage scale:1 orientation:UIImageOrientationUp];
CGImageRelease(cgImage);
//return the color-burned image
return coloredImg;
}
Данное изображение является результатом. Красный прямоугольник представляет собой представление CGPATH. Белый квадрат на самом деле является результатом вышеуказанного метода на пути.
http://i41.tinypic.com/f1zbdi.png
Я полагаю, мне нужно вручную вращать CGPATH 90 градусов, используя COS математику и тем, что нет .. Хотя я мог бы наблюдать за что-то ..?
Thanks Rob! Ты действительно помог мне здесь. В основном я думал, что это слишком сложно .. Попытка создать маску, скопировать содержимое, раскрасить его и слить его обратно в исходное изображение ... –
Только странная вещь, которую я оставил, состоит в том, что изображение, содержащее изображение поворачивает изображение на 90deg при применении colorburn. Похоже, он авторотирует пейзаж или что-то в этом роде. UIImage - это фотография из изображения, взятого в портретном режиме. Я установил режим Imageview на «scale to fill». –
http://stackoverflow.com/questions/1260249/resizing-uiimages-pulled-from-the-camera-also-rotates-the-uiimage –