2014-09-25 25 views
5

Od pewnego czasu borykam się z tym problemem.Usuń underscan/ramkę na zewnętrznym wyświetlaczu ios podczas korzystania z adaptera Lightning HDMI

Jak wszyscy wiemy, adapter Lightning HDMI nie obsługuje wyjścia 1080p, jeśli chodzi o aplikacje, które korzystają z podłączonego wyświetlacza jako drugiego ekranu (jedynym sposobem, aby uzyskać 1080p, jest przesyłanie wideo, ale niestety nie jest to przypadek).

Maksymalna rozdzielczość wyjściowa to 1600x900, co może być w moim przypadku dobre, ale absolutnie muszę pozbyć się "czarnej ramki" wokół mojego okna i nie mogę wymyślić, jak to zrobić. Jedynym sposobem, w jaki mogłem to zrobić, było ręczne rozciągnięcie wyjściowego obrazu telewizyjnego w menu telewizora, ale prawdopodobnie możesz sobie wyobrazić, że nie jest dobrym rozwiązaniem dla mojego produktu końcowego.

Próbowałem

secondScreen.overscanCompensation = UIScreenOverscanCompensationInsetApplicationFrame | UIScreenOverscanCompensationInsetBounds; 

bez powodzenia: mój problem nie jest „overscan”, to „underscan” i obawiam się, że system operacyjny nie może być świadomi wysokiej rozdzielczości telewizora, jeśli adapter mówi, że 1600 x 900 jest najwyższy.

Jeśli podłączę mój MacBookPro do tego samego telewizora i wymuszam ustawienia monitora 1600 x 900, to w jakiś sposób cały ekran jest poprawnie skalowany, aby pokryć cały fizyczny obszar telewizora z mniejszą definicją i bez czarnej ramki. Chciałbym wiedzieć, czy istnieje podobna opcja do ustawienia w ekosystemie systemu iOS.

Próbowałem również wymusić wyjście 720p ze coś takiego

for (UIScreenMode* mode in secondScreen.availableModes) { 
     NSLog(@"%f %f",mode.size.width,mode.size.height); 
     if (mode.size.height == 720) { 
      secondScreen.currentMode = mode; 
     } 
    } 

ponieważ nie można utworzyć UIScreenMode ręcznie, ale to wciąż przy 1600x900. I wszystko jest naprawdę trudne do debugowania, ponieważ adaptery błyskawicy nie mają połączenia danych (tylko ładowanie), więc nie mogę w ogóle używać debugowania XCODE ...

Próbowałem również z AirPlay i VGA Adapter, 1080p działa jak urok, ale z różnych powodów muszę użyć HDMI. iOS8 nie naprawił tego problemu niestety

Czy ktoś ma naprawdę dobry pomysł, aby zasugerować? Dziękuję wam wszystkim.

UPDATE 1:

Odkryłam również, że adapter VGA może dać kłopoty, gdy łączysz starego monitora/telewizora z obsługą 1080p ale bez (na przykład) wejścia HDMI (wiem nie jest to związane z VGA, próbuję tylko wyjaśnić, jak stary był ten monitor, nawet jeśli dostarczono rozdzielczość 1920 x 1080. Był to telewizor plazmowy firmy SHARP na stoisku klienta, nie znający odpowiedniego modelu).

Po podłączeniu do iPada Air z adapterem VGA, wyjście miało wartość 1024x768, a konsola wylogowała się w stylu "nie można zidentyfikować identyfikatora UUID na ekranie". Próbowałem także z kablem HDMI (ponieważ monitor nie miał wejścia HDMI, musiałem użyć adaptera HDMI -> DVI na końcu monitora), ale wszystko, co miałem, to zwykłe 1600x900.

Jednakże udało mi się rozwiązać problem, ale nadal nie mogę wytłumaczyć DLACZEGO to działało: Podłączyłem adapter błyskawicy do złącza HDMI w iPadzie, a następnie podłączyłem przejściówkę HDMI-na-VGA (niezwiązaną w ogóle do Apple), a następnie do monitora za pomocą długiego kabla VGA. 1920x1080 jak urok.

To nie powinno być możliwe (w pewien sposób mam rozdzielczość full hd przez adapter HDMI/lightning, który może generować tylko 1600x900 maks.), Ale zadziałało, spróbuj, jeśli jesteś NAPRAWDĘ w kłopotach tak jak byłem.

Należy również pamiętać, że wynik będzie różny dla różnych telewizorów/monitorów/ekranów. To całkowicie niewiarygodne.

Odpowiedz

1

Jeśli próbujesz pozbyć się skanu/obramowań, sugeruję skalowanie kompensacji overscan, jak pokazano w poniższym kodzie. Przetestowałem go za pomocą kabla lightning na hdmi, który działa dobrze na zewnętrznych wyświetlaczach bez granic. Mam nadzieję że to pomoże. wiwaty kod

próbki:

if UIScreen.screens.count > 1 { 
      let secondScreen = UIScreen.screens[1] 
      secondScreen.overscanCompensation = UIScreenOverscanCompensation(rawValue: UIScreenOverscanCompensation.scale.rawValue.advanced(by: 2))! 
      secondWindow = UIWindow(frame: secondScreen.bounds) 
      secondWindow?.screen = secondScreen 
      secondWindow?.isHidden = false 
} 
+0

Dziękuję, to działało jak czar dla nas. – bergy