2008-11-02 14 views
58

Próbuję załadować obiekt UIImage z NSData, a kod przykładowy był NSImage, myślę, że powinny być takie same. Ale właśnie teraz ładowanie obrazu, zastanawiam się, co jest najlepsze, aby rozwiązać problem UIImage ładowanie NSData.NSData i UIImage

Odpowiedz

43

UIImage ma metodę - initWithData:. Z dokumentów: "Dane w parametrze danych muszą być sformatowane tak, aby odpowiadały formatowi jednego z obsługiwanych typów obrazu systemu."

+0

Tak, to co używam . NSData ma adres, a po wywołaniu UIImaeg -initWithData: theData, punkt staje się 0. Nie jestem pewien, gdzie zobaczyć komunikat o błędzie. – BlueDolphin

3

theData powinna być obiektem NSData, który już zawiera dane. Przed załadowaniem pliku należy go wczytać do obiektu NSData. Możesz to sprawdzić, używając NSLog w danych i sprawdzić, czy zawiera prawidłowe dane.

105

nie próbowałem UIImageJPEGRepresentation() wcześniej, ale UIImagePNGRepresentation działa dobrze dla mnie, a konwersja między NSData i UIImage jest martwy prosta:

NSData *imageData = UIImagePNGRepresentation(image); 
UIImage *image=[UIImage imageWithData:imageData]; 
21

Spróbuj przekonwertować obraz do NSData:

UIImage *img = [UIImage imageNamed:@"image.png"]; 
NSData *data1 = UIImagePNGRepresentation(img); 
0

Aby bezpiecznie wykonać kod, użyj bloku if-let z danymi, w funkcji zwracanej przez funkcję UIImagePNGRepresentation, wartość opcjonalna.

if let img = UIImage(named: "Hello.png") { 
    if let data:Data = UIImagePNGRepresentation(img) { 
     // Handle operations with data here...   
    } 
} 

Uwaga: danych jest Swift 3 klasy. Wykorzystanie danych zamiast NSData z Swift 3

Generic operacji graficznych (takich jak png & jpg zarówno):

if let img = UIImage(named: "Hello.png") { 
     if let data:Data = UIImagePNGRepresentation(img) { 
       handleOperationWithData(data: data)  
     } else if let data:Data = UIImageJPEGRepresentation(img, 1.0) { 
       handleOperationWithData(data: data)  
     } 
} 

******* 
func handleOperationWithData(data: Data) { 
    // Handle operations with data here... 
    if let image = UIImage(data: data) { 
     // Use image... 
    } 
} 

Przez używając rozszerzenia:

extension UIImage { 

    var pngRepresentationData: Data? { 
     return UIImagePNGRepresentation(img) 
    } 

    var jpegRepresentationData: Data? { 
     return UIImageJPEGRepresentation(self, 1.0) 
    } 
} 

******* 
if let img = UIImage(named: "Hello.png") { 
     if let data = img.pngRepresentationData { 
       handleOperationWithData(data: data)  
     } else if let data = jpegRepresentationData { 
       handleOperationWithData(data: data)  
    } 
} 

******* 
func handleOperationWithData(data: Data) { 
    // Handle operations with data here... 
    if let image = UIImage(data: data) { 
     // Use image... 
    } 
}