34 Stimmen

Überblendung von zwei Bildern basierend auf Alpha/Transparenz des oberen Bildes

Ich versuche, einen Hintergrund mit einem Vordergrundbild zu mischen, wobei das Vordergrundbild ein transparentes Bild mit Linien darauf ist.

Ich versuche, es auf diese Weise zu tun.

UIGraphicsBeginImageContext(CGSizeMake(320, 480));
CGContextRef context = UIGraphicsGetCurrentContext();   

// create rect that fills screen
CGRect bounds = CGRectMake( 0,0, 320, 480);

// This is my bkgnd image
CGContextDrawImage(context, bounds, [UIImage imageNamed:@"bkgnd.jpg"].CGImage);

CGContextSetBlendMode(context, kCGBlendModeSourceIn);

// This is my image to blend in
CGContextDrawImage(context, bounds, [UIImage imageNamed:@"over.png"].CGImage);

UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();

UIImageWriteToSavedPhotosAlbum(outputImage, self, nil, nil);
// clean up drawing environment
//
UIGraphicsEndImageContext();

aber es scheint nicht zu funktionieren.

Wir sind für jeden Vorschlag dankbar.

1voto

Rob Napier Punkte 265102

Können Sie genauer beschreiben, was Sie mit "es scheint nicht zu funktionieren" meinen? Zeichnet es nur ein Bild oder das andere Bild? Zeichnet es schwarz? Rauschen? Absturz? Warum haben Sie gewählt kCGBlendModeSourceIn Welchen Effekt wollen Sie erreichen (es gibt Dutzende von Möglichkeiten, Bilder zu überblenden)? Hat eines Ihrer Bilder bereits Alpha?

Ich nehme an, dass Sie versuchen, zwei Bilder so zu mischen, dass jedes eine Deckkraft von 50 % hat? Verwenden Sie CGContextSetAlpha() dafür eher als CGContextSetBlendMode() .

0voto

fbrereto Punkte 34770

Sie können verwenden UIImage 's drawInRect: o drawAtPoint: anstelle von CGContextDrawImage (sie zeichnen auf den aktuellen Kontext). Gibt es einen Unterschied in der Ausgabe mit ihnen?

Es kann auch hilfreich sein, sich zu vergewissern, dass die UIImage* Werte, die Sie von imageNamed: gültig sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X