iOS 10.2 swift 3.0UIImage créé n'apparaît pas comme je l'aurais prévu?
J'utilise ces routines pour couper, redimensionner et recombiner une image à afficher sur un AppleTV. Mais malgré le fait qu'il rapporte l'image comme la taille correcte, cela ne fonctionne pas comme je l'avais prévu/voulu.
Qu'est-ce qui me manque ici?
func cropImage(image: UIImage, newRect: CGRect) -> UIImage {
let img = CIImage(image: image)!.cropping(to: newRect)
let image = UIImage(ciImage: img, scale: 1.0, orientation: image.imageOrientation)
return image
}
func combine2LONGImage(imageUn: UIImage, imageDeux: UIImage) -> UIImage {
let size = CGSize(width: imageUn.size.width + imageDeux.size.width, height: imageUn.size.height)
UIGraphicsBeginImageContext(size)
imageUn.draw(in: CGRect(x: 0, y: 0, width: imageUn.size.width, height: imageUn.size.height))
imageDeux.draw(in: CGRect(x: imageUn.size.width, y: 0, width: imageDeux.size.width, height: imageDeux.size.height))
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
func resizeLONGImage(image: UIImage, newSize: CGSize) -> UIImage {
UIGraphicsBeginImageContext(newSize)
image.draw(in: CGRect(x:0, y:0, width: newSize.width, height: self.view.bounds.height))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
let leftSide = CGRect(x: 0, y: 0, width: (image2S?.size.width)!/2, height: self.view.bounds.height)
let leftImage = self.cropImage(image: image2S!, newRect: leftSide)
let rightSide = CGRect(x: (image2S?.size.width)!/2, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
let rightImage = self.cropImage(image: image2S!, newRect: rightSide)
print("20022017 \(leftImage) \(rightImage)")
let newLeftImage = self.resizeLONGImage(image: leftImage, newSize: CGSize(width: self.view.bounds.width, height: self.view.bounds.height))
let newRightImage = self.resizeLONGImage(image: rightImage, newSize: CGSize(width: self.view.bounds.width, height: self.view.bounds.height))
let superNewImage = self.combine2LONGImage(imageUn: newLeftImage, imageDeux: newRightImage)
print("19022017 newimage \(self.image2P.bounds) \(leftImage.size.width) \(newLeftImage.size.height) \(superNewImage.size)")
self.image2P.image = superNewImage
self.image2P.contentMode = .left
self.image2P.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
l'image renvoyée est [est la taille correcte [deux fois plus longtemps que l'écran AppleTV, même hauteur] ... mais le contentMode
me échoue, il redimensionne l'image, il semble qu'il convient à l'écran !!]. Je l'ai fait une photo et je suis arrivé ce ...
Oui, il est un 3 & 4, mais son identique au 1 & 2.
La console rapporte?
19022017 previewPane 1920.0 1080.0 1920.0 1080.0
20022017 Optional(<UIImage: 0x60000009d9c0>, {1920, 768}) Optional(<UIImage: 0x60000009da10>, {1024, 768})
19022017 newimage (0.0, 0.0, 1920.0, 1080.0) 1920.0 1080.0 (3840.0, 1080.0)
Le superNewImage
est 3840 large et 1080 de haut, et je viens de justifier à gauche, mais que fait-il? Si je charge une image que j'ai créée avec Paint indique que la taille est la même et que je la montre à l'écran, cela fonctionne comme je l'aurais souhaité, moitié à l'écran, moitié à moitié.
L'image originale avec laquelle je commence est ici.
Ce que je cherche à faire est de montrer que le premier chiffre à l'écran afin que l'utilisateur de l'application peut faire défiler latéralement vers la seconde. Le défilement que j'ai eu, quelques réparations à faire. Et cela fonctionne si je télécharge une image prédéfinie avec la taille correcte [2 x largeur, même hauteur]. Mais si je télécharge une image qui est un sous-ensemble, essayez et recadrez + le combiner, non, cela ne fonctionne pas. Juste ajouté un morceau de code leftSide un autre whoops peut-être ... ne fonctionne toujours pas. La première image que je crée la taille exacte a travaillé, il ressemble à ceci ...
Voici l'original comme celui-ci ...
ok - un peu peu clair ce que vous commencez, et ce que vous essayez de finir avec ... Pouvez-vous lier à votre image originale, et comment vous vous attendez à ce qu'il se termine? Et, je suppose que votre fonction 'cropImage()' est la même que 'self.chopImageFromRect()'? – DonMag
hmmm ... votre image originale est '2048 x 768' oui? Voulez-vous que cette échelle non proportionnelle à «3840 x 1080»? Ou, voulez-vous proportionnellement à l'échelle de «2,880 x 1080», puis chaque moitié centrée horizontalement de chaque côté de l'image finale «3840 x 1080»? Ou, ne voulez-vous pas que l'image soit mise à l'échelle, mais centrez chaque moitié verticalement et horizontalement de chaque côté de l'image finale '3840 x 1080'? – DonMag
Je souhaite que l'image soit mise à l'échelle afin qu'elle corresponde à l'AppleTV en tant que deux écrans AppleTV distincts. Donc une seule image qui est 3840 x 1080. Je veux que cette image apparaisse à l'écran comme si elle était seulement 1920 x 1080, donnant à l'utilisateur la possibilité de voir l'autre moitié à 1920 x 1080 en faisant défiler. Je prends le 2048 x 768, le hache en deux (1024 x 768) redimensionne les deux demi-tons puis les combine à un, finissant avec une image 3840 x 1080. Mais quand je le montre à l'écran, je vois les deux moitiés au en même temps, malgré l'utilisation d'un contentMode de = left. – user3069232