2012-07-12 9 views
5

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 ...

Odpowiedz

0

Powodem jest w koncepcja. Wszystkie UIKit, CoreGraphics i CoreImage wykonują trzy tak fundamentalnie różne rzeczy, że nie może istnieć "wielki centralny ujednolicony format obrazu". Ramy te dobrze ze sobą współpracują; to powiedziawszy, konwersja powinna być tak zoptymalizowana i tak szybka, jak to możliwe, ale oczywiście przetwarzanie obrazu jest zawsze stosunkowo kosztowną operacją.

Powiązane problemy