2016-10-17 4 views
11

Od aktualizacji do iOS 10, Dostaję następujący błąd podczas tworzenia UIImage z NSMutableData:Pierwsze "JPEGDecompressSurface: dekodowania obrazu nie powiodło się:" na tworzeniu UIImage z JPG surowych danych na iOS 10

JPEGDecompressSurface: Picture dekodowania failed: E000 .....”

nie ma dziwny albo nie normalne zachowanie wynikające, ale kiedy debug mojej aplikacji widzę błędu całkiem każdym razem, kiedy utworzyć obraz

Oto. kod, w którym kreuję e obraz z pobranych danych z wykorzystaniem GCDAsynchSocket klasę:

NSData *imgDataToGen = [NSData dataWithData:imgBuffer]; 
UIImage *img = [[UIImage alloc] initWithData:imgDataToGen]; 
[_delegate client:self didReceiveImage:img]; 

Bufor imgBuffer jest NSMutableData-Object, który posiada pobranych danych obrazu. Po zakończeniu pobierania dane są przekształcane na obraz i przekazywane do głównego interfejsu GUI, uruchamiając niestandardową metodę delegowania. W głównym GUI obraz jest ustawiony w widoku obrazu. Po przetworzeniu obrazu bufor jest czyszczony.

Próbowałem różnych rzeczy, jak wymuszanie dekodowania UIImage już w wątku tła, ale zawsze otrzymuję ten sam błąd. Obraz jest renderowany zawsze we właściwy sposób, więc naprawdę nie rozumiem komunikatu o błędzie.

Próbowałem na iPhone 5c z iOS 10.0.2 i Simulator 5s z iOS 9.2 i 10.0.2.

Na iPhone 5c pojawia się błąd, na symulatorze nie.

Jak mogę naprawić ten błąd lub czy ten typ błędu może zostać zignorowany?

+0

Ja również występuje ten problem. Czy znalazłeś sposób, aby to naprawić? –

+0

Odliczaj mnie - Widzę to samo. –

+0

Mam problem z tym samym problemem (przesyłanie strumieniowe obrazów z kamery bezpieczeństwa MOBOTIX), co ciekawe, ale nie na wszystkich urządzeniach - czy sprawdziłeś na symulatorze iOS i czy otrzymujesz to również, gdy pomijasz wstępne kodowanie tła? – DrMickeyLauer

Odpowiedz

0

Miałem ten sam problem i rozwiązany. W moim przypadku nie zauważyłem, ale konwersja z danych do UIImage i zapisanie zostało wykonane w głównym wątku, po wysłaniu go asynchronicznie do globalnej kolejki z priorytetem tła QOS i tylko odświeżenie wysłanej przez UImage GUI z powrotem do głównej kolejki, błąd przestanie się wyświetlać w debugerze. Mam nadzieję, że ci to pomoże.

Przykład:

fileprivate func downloadFromURL(urlString:String, callback:((_ image:UIImage?, _ error: Error?)->Void)?) { 
    var image: UIImage? 
    guard let url = URL(string: urlString) else { 
     callback!(nil, iError.RuntimeError(reason: "Wrong URL for image".localized)) 
     return 
    } 
    DispatchQueue.global(qos: .background).async { 
     do { 
      let data = try Data(contentsOf: url) 
      image = UIImage(data: data) 
      DispatchQueue.main.async { 
       callback!(image,nil) 
       return 
      } 

     } catch { 
      print(error.localizedDescription) 
      callback!(nil, iError.RuntimeError(reason: "Data error for image".localized)) 
      return 

     } 
    } 
} 
+0

Czy możesz wysłać odpowiedni fragment kodu? – ulmstefan

+0

dodano przykład do oryginalnego postu na żądanie – Gutty1

Powiązane problemy