Nie rozumiem, dlaczego tak wiele konwersji formatów obrazu jest potrzebne w iOS. Na przykład, jeśli załaduję jpg do UIImage, a następnie chcę na nim wykryć twarz, muszę utworzyć CIImage do przekazania do CIDetectora. Czy nie stanowi to trafienia zarówno w pamięci, jak i wydajności?Dlaczego jest tak dużo konwersji pomiędzy formatami obrazu? (UIImage, CGImage, CIImage)
Czy jest to coś starszego między Core Graphics, Core Image i UIKit (i prawdopodobnie openGL ES, ale nie pracuję z tym)? Czy ogólnie hit jest banalny?
Zrobię, co będę musiał zrobić, ale chciałbym dowiedzieć się więcej na ten temat. Ponadto pojawiały się problemy, które czasami powodowały konwersje i zaplątały się w różnice między formatami.
Aktualizacja
Ok - więc ja właśnie dinged ponownie przez mojego zamieszania na tych formatów (lub pomieszanie tych formatów ...). Zmarnowane pół godziny. Oto, co robiłem:
Testowanie twarze w lokalnym obrazie, stworzyłem potrzebne CIImage z:.
CIImage *ciImage = [image CIImage];
i nie otrzymuję żadnych funkcji z powrotem bez względu na orientację mijałem w I know to zdjęcie zadziałało z CIDetectorTypeFace
przed i, które napotkałem na problem z formatem CIImage
. Wypróbowane tworzenie CCImage w ten sposób:
CIImage *ciImage = [CIImage imageWithCGImage:image.CGImage];
i Wykrywanie twarzy działa dobrze. Arrgh! Upewniłem się, z [image CIImage]
, że wynikowy CIImage nie był zerowy. Więc jestem zdezorientowany. Pierwsze podejście uzyskuje wskaźnik, a drugie tworzy nowy obiekt CII. Czy to ma znaczenie?
Kopanie w pliku UIImage.h widzę następujące:
// returns underlying CGImageRef or nil if CIImage based
@property(nonatomic,readonly) CGImageRef CGImage;
// returns underlying CIImage or nil if CGImageRef based
@property(nonatomic,readonly) CIImage *CIImage;
Więc myślę, że jest kluczem - Twórca Strzeż: test na zero ...