2009-12-20 8 views
7

muszę narysować serię PNG do CGContext więc mogę zmieszać je razem:Rysowanie PNG do kontekstu Graphics do mieszania trybu Manipulacja

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

Obecnie mam aplikacji pracujących na podstawie tylko rysunek każdy obraz jako UIImageView i dodawanie go jako podglądu do pliku widoku poprzez: [self addSubview:someImageView] ... ale to nie pozwala na manipulację trybem mieszania, prawda?

Obecnie Vars UIImageView są przypisane poprzez:

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

Więc Próbowałem zastępując te z jednej z nich bez powodzenia:

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

a ten potrzebuje CGImage które nie jestem pewien, jak zrobić z PNG:

CGContextDrawImage(context, rect, someCGImage); 

Co z tego? czy ja tęsknię? Nie są one wyzwalane przez żadną interakcję, wystarczy je załadować/narysować po załadowaniu aplikacji.

Dzięki za wszelkie kontakty. :)

Odpowiedz

19

Nie musisz używać UIImageViews. Zamiast tego należy zamieniać rysunek między wywołania UIGraphicsBeginImageContext i UIGraphicsEndImageContext.

Na przykład (kod nie próbowałem):

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(); 

Jeśli chcesz użyć CG wzywa, zadzwoń:

CGContextRef context = UIGraphicsGetCurrentContext(); 

uzyskać ref kontekstowe.

+1

Przy okazji, można łatwo zrobić CGImage z UIImage. Istnieje właściwość CGImage na UIImage. Jednak unikając mieszania procedur rysowania UIImage i CGImage, albo okaże się, że kontekst rysowania jest do góry nogami. –

+0

Nie było jasne w tej ostatniej części, ponieważ chcę obrócić uiimages przed ich rysowaniem, ale wywołanie CGContextRotateCTM (kontekst, 3.14); zanim polecenie rysowania faktycznie nie obróciło się o pożądane 180 stopni. I tak, pierwsze polecenie, które wywołałem w metodzie drawRect, to kontekst CGContextRef = UIGraphicsGetCurrentContext(); Myśli? – steganous

+0

Wygląda na to, że robisz to dobrze. Czy możesz opublikować swój nowy kod? –

Powiązane problemy