2012-06-28 70 views
5

Tôi đang tạo ứng dụng sử dụng UIImagePickerController để trình bày máy ảnh cho người dùng bằng lớp phủ tùy chỉnh bao gồm một trong hai lưới/mẫu trên chính chế độ xem "máy ảnh".Thêm màu vào hình ảnh

Bản thân lưới là các tệp .png trong một UIImageView được thêm vào lớp phủ, chúng khá phức tạp nên tôi thực sự muốn tránh xa việc vẽ lưới trong mã, mặc dù điều đó sẽ giúp tôi đẹp và sạch câu trả lời đơn giản cho câu hỏi của tôi.

Tôi muốn có thể cung cấp lưới ở nhiều màu khác nhau. Giải pháp rõ ràng là tạo ra nhiều hình ảnh .png với các màu khác nhau, nhưng với mỗi màu sẽ phải có bốn hình ảnh riêng biệt (thường xuyên và võng mạc cho mỗi lưới) để nhanh chóng có thể thêm nhiều nội dung.

Giải pháp mà tôi nghĩ là lý tưởng, tôi chỉ cần tạo lưới bằng màu trắng/xám và sau đó áp dụng một màu để nó tô màu nó một cách thích hợp.

Điều đó có khả thi không? Hay tôi cần tìm một giải pháp thay thế?

+0

xem tại đây: http: //stackoverflow.com/questions/1117211/how-would-i-tint-an-image-programatically-on-the-iphone – shannoga

+2

Bạn đã kiểm tra [bài đăng này] [1]? Nó có vẻ gần hơn với những gì bạn cần. [1]: http://stackoverflow.com/questions/1223340/iphone-how-do-you-color-an-image – Ananth

Trả lời

7

Với nhờ Ananth chỉ cho tôi đến iPhone - How do you color an image?

Tôi đã thêm phương pháp này để mã của tôi như đề xuất trong câu hỏi, với việc sửa đổi trong câu trả lời của willc2:

-(UIImage *)colorizeImage:(UIImage *)baseImage color:(UIColor *)theColor { 
    UIGraphicsBeginImageContext(baseImage.size); 

    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGRect area = CGRectMake(0, 0, baseImage.size.width, baseImage.size.height); 

    CGContextScaleCTM(ctx, 1, -1); 
    CGContextTranslateCTM(ctx, 0, -area.size.height); 
    CGContextSaveGState(ctx); 
    CGContextClipToMask(ctx, area, baseImage.CGImage); 
    [theColor set]; 
    CGContextFillRect(ctx, area); 
    CGContextRestoreGState(ctx); 
    CGContextSetBlendMode(ctx, kCGBlendModeMultiply); 
    CGContextDrawImage(ctx, area, baseImage.CGImage); 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

... và Tôi nhận được chính xác những gì tôi đang sau.

+0

Không sử dụng. Nó làm giảm chất lượng hình ảnh. Sử dụng điều này, không mất chất lượng: http://stackoverflow.com/a/4630136/320018 –

Các vấn đề liên quan