[Iphone] كيف يمكنني تلوين صورة برمجيا على اي فون؟


Answers

في iOS7، أنها قد أدخلت خاصية تينتكولور على أويماجيفيو و ريندرينغمود على أويماج. لتلوين أويماج على iOS7، كل ما عليك القيام به هو:

UIImageView* imageView = 
UIImage* originalImage = 
UIImage* imageForRendering = [originalImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
imageView.image = imageForRendering;
imageView.tintColor = [UIColor redColor]; // or any color you want to tint it with
Question

أود أن لون صورة مع مرجع اللون. يجب أن تبدو النتائج مثل وضع مزج تعدد في فوتوشوب، حيث سيتم استبدال البيض مع لون :

وسوف يتم تغيير قيمة اللون بشكل مستمر.

المتابعة: أود أن وضع رمز للقيام بذلك في بلدي دراغريكت إيماجيفيو: الأسلوب، أليس كذلك؟

وكما هو الحال دائما، فإن مقتطف الشفرة سيساعد كثيرا في فهمي، بدلا من الارتباط.

تحديث: سوبكلاسينغ و إيماجيفيو مع رمز اقترح رامين .

أضع هذا في فيوديدلواد: من وجهة نظري عرض:

[self.lena setImage:[UIImage imageNamed:kImageName]];
[self.lena setOverlayColor:[UIColor blueColor]];
[super viewDidLoad];

أرى الصورة، ولكن لا يجري ملون. حاولت أيضا تحميل الصور الأخرى، ووضع الصورة في يب، واستدعاء سيتنيدسديسبلاي: في وحدة تحكم رأيي.

تحديث : دراوريكت: لا يتم استدعاؤها.

التحديث النهائي: لقد وجدت مشروع القديم الذي كان إيماجيفيو إعداد بشكل صحيح حتى أتمكن من اختبار رمز رامين وأنه يعمل مثل سحر!

النهائي، التحديث النهائي:

بالنسبة لأولئك منكم مجرد تعلم عن الرسومات الأساسية، وهنا هو أبسط شيء يمكن أن تعمل.

في إيفيو تحت فئة فرعية:

- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColor(context, CGColorGetComponents([UIColor colorWithRed:0.5 green:0.5 blue:0 alpha:1].CGColor)); // don't make color too saturated

    CGContextFillRect(context, rect); // draw base

    [[UIImage imageNamed:@"someImage.png"] drawInRect: rect blendMode:kCGBlendModeOverlay alpha:1.0]; // draw image
}






UIImage * image = mySourceImage;
UIColor * color = [UIColor yellowColor];  
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height) blendMode:kCGBlendModeNormal alpha:1];
UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, image.size.width, image.size.height)];
[color setFill];
[path fillWithBlendMode:kCGBlendModeMultiply alpha:1]; //look up blending modes for your needs
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//use newImage for something






الشيء الوحيد الذي يمكن أن أفكر في أن يكون لخلق نظرة مستطيلة معظمها شفافة مع اللون المطلوب ووضعه على عرض الصور الخاصة بك عن طريق إضافتها باعتبارها سوبفيو. لست متأكدا مما إذا كان هذا سوف حقا تلمح الصورة في الطريقة التي تتخيل الرغم من ذلك، أنا لست متأكدا كيف يمكنك الإختراق في صورة واستبدال انتقائي ألوان معينة مع الآخرين ... يبدو طموحا جدا بالنسبة لي.

فمثلا:

UIImageView *yourPicture = (however you grab the image);
UIView *colorBlock = [[UIView alloc] initWithFrame:yourPicture.frame];
//Replace R G B and A with values from 0 - 1 based on your color and transparency
colorBlock.backgroundColor = [UIColor colorWithRed:R green:G blue:B alpha:A];
[yourPicture addSubView:colorBlock];

وثائق ل إيكولور:

colorWithRed:green:blue:alpha:

Creates and returns a color object using the specified opacity and RGB component values.

+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha

Parameters

red    - The red component of the color object, specified as a value from 0.0 to 1.0.

green  - The green component of the color object, specified as a value from 0.0 to 1.0.

blue   - The blue component of the color object, specified as a value from 0.0 to 1.0.



alpha  - The opacity value of the color object, specified as a value from 0.0 to 1.0.

Return Value

The color object. The color information represented by this object is in the device RGB colorspace. 



أردت أن تلوين صورة مع ألفا وأنا خلقت الطبقة التالية. واسمحوا لي أن أعرف إذا وجدت أي مشاكل معها.

لقد سمى CSTintedImageView ويرث من UIImageView منذ UIImageView لا استدعاء UIImageView drawRect: الأسلوب، مثل المذكورة في الردود السابقة. لقد عينت المعين معين مماثلة لتلك الموجودة في فئة UIImageView .

الاستعمال:

CSTintedImageView * imageView = [[CSTintedImageView alloc] initWithImage:[UIImage imageNamed:@"image"]];
imageView.tintColor = [UIColor redColor];

CSTintedImageView.h

@interface CSTintedImageView : UIView

@property (strong, nonatomic) UIImage * image;
@property (strong, nonatomic) UIColor * tintColor;

- (id)initWithImage:(UIImage *)image;

@end

CSTintedImageView.m

#import "CSTintedImageView.h"

@implementation CSTintedImageView

@synthesize image=_image;
@synthesize tintColor=_tintColor;

- (id)initWithImage:(UIImage *)image
{
    self = [super initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];

    if(self)
    {
        self.image = image;

        //set the view to opaque
        self.opaque = NO;
    }

    return self;
}

- (void)setTintColor:(UIColor *)color
{
    _tintColor = color;

    //update every time the tint color is set
    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();    

    //resolve CG/iOS coordinate mismatch
    CGContextScaleCTM(context, 1, -1);
    CGContextTranslateCTM(context, 0, -rect.size.height);

    //set the clipping area to the image
    CGContextClipToMask(context, rect, _image.CGImage);

    //set the fill color
    CGContextSetFillColor(context, CGColorGetComponents(_tintColor.CGColor));
    CGContextFillRect(context, rect);    

    //blend mode overlay
    CGContextSetBlendMode(context, kCGBlendModeOverlay);

    //draw the image
    CGContextDrawImage(context, rect, _image.CGImage);    
}

@end