2015-06-30 9 views
8

UIImage ile bir UIImageView sahibim. Bu resmin bir kopyasını iki değişkene atamak istiyorum. Kullanıcının yaptıklarına göre görüntü manipüle edilmelidir. Sorun şu ki, görüntü her değişkende aynı. Sanırım, çünkü referans olarak geçiyorlar.Bir UIImage nasıl kopyalanır?

let image1 = imageView.image! 
let image2 = imageView.image! 

Bu resmin iki ayrı kopyasını nasıl alabilirim?

Teşekkür ederiz!

Düzenleme: Sadece bir resmi kesmek orijinali gibi başka tutun: Ben başarmak istiyorum ne

.

let imageLeft = googleImageView.image! 
let imageRef = CGImageCreateCopy(googleImageView.image!.CGImage) 
let imageRight = UIImage(CGImage: imageRef!, scale: googleImageView.image!.scale, orientation: googleImageView.image!.imageOrientation) 

if translation.x < 0 { 
    let scale = imageLeft.scale 
    let newRect = CGRectMake(0, 0, (imageLeft.size.width + translation.x) * scale, imageLeft.size.height * scale) 
    let imageRef = CGImageCreateWithImageInRect(imageLeft.CGImage, newRect) 

    if let croppedImage = imageRef { 
     googleImageView.image = UIImage(CGImage: croppedImage, scale: scale, orientation: imageLeft.imageOrientation) 
    } 
} 
print("left image: \(imageLeft) right image \(imageRight)") 

konsola baskılar Yukarıdaki kod:

left image: <UIImage: 0x7fd020dca070>, {111, 167} 
right image <UIImage: 0x7fd020dda430>, {111, 167} 
left image: <UIImage: 0x7fd020df9ba0>, {110, 167} 
right image <UIImage: 0x7fd020d45670>, {110, 167} 

... vb. Yani, BOTH görüntüleri yeni bir boyut alır. Sadece sol Görüntü kırpılmış olmalıdır.

+1

http://stackoverflow.com/a/6770387/3324388 – Aggressor

cevap

9

@Aggressor sen imageview bu şekilde resminizi kopyalayabilirsiniz önerdi gibi:

let newCgIm = CGImageCreateCopy(imageView.image?.CGImage) 
let newImage = UIImage(CGImage: newCgIm, scale: imageView.image!.scale, orientation: imageView.image!.imageOrientation) 
+0

Takip eden soru: Görüntü kopyalanır ANCAK hala ilki gibi manipüle edilir. Bunun neden böyle olduğu hakkında bir fikrin var mı? – heikomania

+0

Bu kod, Imageview 'den resim alır ve başka bir' newImage 'dosyasına kaydeder ve tam olarak hangi eylemi gerçekleştirdiğinizi bilmiyorum. –

+0

Aşağıdakileri yapmak istiyorum: Resim1'i kırp, ancak orijinali image2 olarak saklayın. Image1'i kırptığımda, image2 ikiyi kırpıyor. Sorunu açıklığa kavuşturmak için düzenleyeceğim. – heikomania

2

cgImage yeni bir kopyasını işlevi yoktur Swift 3 ve ayrıca uyumlu ile Swift 4 ile birlikte gelir. Yani bu şekilde kullanabilirsiniz

guard let cgImage = imageView.image?.cgImage?.copy() else { 
     return 
    } 
let newImage = UIImage(cgImage: cgImage, 
         scale: imageView.image!.scale, 
         orientation: imageView.image!.imageOrientation)