Ich habe eine UIImage, die von einem CIImage mit geladen wird:eine CGImage von CIImage Ersten
tempImage = [UIImage imageWithCIImage:ciImage];
Das Problem ist, ich brauche tempImage
zu einer bestimmten CGRect
und dem einzigen Weg zu beschneiden Ich weiß, wie zu tun Dies ist mit CGImage
. Das Problem ist, dass in der iOS 6.0-Dokumentation ich dies gefunden:
CGImage
If the UIImage object was initialized using a CIImage object, the value of the property is NULL.
A. von CIImage zu CGImage Wie konvertiert? Ich verwende diesen Code, aber ich habe ein Speicherleck (und kann nicht verstehen, wo):
+(UIImage*)UIImageFromCIImage:(CIImage*)ciImage {
CGSize size = ciImage.extent.size;
UIGraphicsBeginImageContext(size);
CGRect rect;
rect.origin = CGPointZero;
rect.size = size;
UIImage *remImage = [UIImage imageWithCIImage:ciImage];
[remImage drawInRect:rect];
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
remImage = nil;
ciImage = nil;
//
return result;
}
Sie erwähnen, dass Sie das CGImage benötigen, um die Ernte durchzuführen. Wie Joris Kluivers sagte, können Sie die Bildausschnitte ohne CGImage verwenden, indem Sie den CICrop-Filter auf dem CIImage verwenden. Gibt es noch etwas, für das Sie das CGImage benötigen? Wenn ja, was? –
Haben Sie in Bezug auf das Speicherleck auch versucht, die Leaks-Vorlage von Instruments zu verwenden? Zwischen dem Leaks-Instrument und dem Heapshot-Tool des Zuordnungsinstruments sollten Sie in der Lage sein, herauszufinden, wo Sie in Ihrer App undicht waren oder Speicher angesammelt haben. –
@PeterHosey Ich tat, und ich fand, dass aus irgendeinem Grund habe ich über 200 Live-Instanzen von CIImage und über 100 von CGImage, die alle von dieser Methode stammen. Ich sehe nur nicht wo – tagyro