2009-12-20 28 views
7

tôi cần phải vẽ một loạt các PNG vào một CGContext vì vậy tôi có thể trộn chúng với nhau:Vẽ một hình ảnh PNG vào một bối cảnh đồ họa cho Trộn Chế độ Manipulation

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetBlendMode(context, kCGBlendModeOverlay); 

Hiện nay tôi có ứng dụng của tôi làm việc dựa trên chỉ vẽ mỗi hình ảnh dưới dạng UIImageView và thêm chúng dưới dạng chế độ xem phụ vào tệp xem qua: [self addSubview:someImageView] ... nhưng điều này không cho phép thao tác chế độ hoà trộn, phải không?

Hiện nay vars UIImageView đang được giao qua:

someImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image-name.png"]]; 

Vì vậy, tôi đã cố gắng thay thế những người có một trong những không có may mắn:

[[UIImage imageNamed:@"image-name.png"] drawInRect:rect blendMode:kCGBlendModeOverlay alpha:1.0]; 

và điều này cần có một CGImage mà tôi 'không chắc chắn cách thực hiện với PNG:

CGContextDrawImage(context, rect, someCGImage); 

Vì vậy, những gì tôi có bị mất không? Chúng không được kích hoạt bởi bất kỳ tương tác nào, chúng chỉ cần tải/vẽ khi ứng dụng tải.

Cảm ơn mọi khách hàng tiềm năng. :)

Trả lời

19

Bạn không cần sử dụng UIImageViews. Thay vào đó, hãy đặt bản vẽ của bạn giữa các cuộc gọi đến UIGraphicsBeginImageContextUIGraphicsEndImageContext.

Ví dụ (mã chưa thử):

UIImage* uiimage = [UIImage imageNamed:@"image-name.png"]; 
UIImage* uiimage2 = [UIImage imageNamed:@"other-image-name.png"]; 

CGSize size = uiimage.size; 

UIGraphicsBeginImageContext(size); 

[uiimage drawAtPoint:CGPointZero blendMode:kCGBlendModeOverlay alpha:1.0]; 
[uiimage2 drawAtPoint:CGPointZero blendMode:kCGBlendModeOverlay alpha:1.0]; 

UIImage* blendedImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

Nếu bạn muốn sử dụng CG gọi, hãy gọi:

CGContextRef context = UIGraphicsGetCurrentContext(); 

để có được những ref ngữ cảnh.

+1

BTW, thật dễ dàng để tạo CGImage từ UIImage. Có thuộc tính CGImage trên UIImage. Tuy nhiên, tránh trộn lẫn các thường trình vẽ UIImage và CGImage, nếu không bạn sẽ thấy bối cảnh vẽ là lộn ngược. –

+0

Tôi không rõ ràng về phần cuối cùng, vì tôi muốn xoay các ảnh trước khi vẽ chúng, nhưng gọi CGContextRotateCTM (ngữ cảnh, 3,14); trước khi lệnh vẽ không thực sự xoay 180 độ mong muốn. Và có, lệnh đầu tiên tôi gọi trong phương thức drawRect là CGContextRef context = UIGraphicsGetCurrentContext(); Suy nghĩ? – steganous

+0

Có vẻ như bạn đang làm đúng. Bạn có thể đăng mã mới của mình không? –

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