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
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."
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.
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];
Spróbuj przekonwertować obraz do NSData:
UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);
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...
}
}
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