2015-06-30 10 views
8

मेरे पास UIImageView UIImage के साथ है। मैं इन तस्वीरों की एक प्रति दो चरों को असाइन करना चाहता हूं। उपयोगकर्ता जो छवि कर रहा है उसके आधार पर छेड़छाड़ की जानी चाहिए। समस्या यह है कि छवि प्रत्येक चर में समान है। मुझे लगता है, क्योंकि वे संदर्भ द्वारा पारित कर रहे हैं।यूआईएममेज की प्रतिलिपि कैसे करें?

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

मुझे इस छवि की दो अलग-अलग प्रतियां कैसे प्राप्त होंगी?

धन्यवाद!

संपादित करें:

मैं क्या हासिल करना चाहते हैं: बस एक चित्र काटने के लिए, मूल जैसे अन्य रहते हैं।

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)") 

कंसोल के लिए प्रिंट उपरोक्त कोड:

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

... और इतने पर। तो, दोनों छवियों को एक नया आकार मिलता है। केवल बाएं छवि फसल होनी चाहिए।

+1

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

उत्तर

9

रूप @Aggressor सुझाव आप इस तरह से imageView से अपनी छवि को कॉपी कर सकते हैं:

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

अनुवर्ती प्रश्न: छवि की नकल की हो जाता है, लेकिन यह अभी भी पहले की तरह चालाकी से किया जाता है। कोई विचार क्यों यह मामला है? – heikomania

+0

यह कोड छवि को 'imageView' से ले जाएगा और इसे किसी अन्य 'नए छवि' में सहेज लेगा और मुझे नहीं पता कि आप वास्तव में कौन सी कार्रवाई कर रहे हैं। –

+0

मैं निम्नलिखित करना चाहता हूं: छवि 1 क्रॉप करें लेकिन मूल को छवि 2 के रूप में रखें। जब मैं image1 फसल करता हूं, image2 दो फसल हो जाता है। मैं स्पष्ट करने के लिए अपने प्रश्न को संपादित करूंगा। – heikomania

2

वहाँ cgImage की एक नई प्रतिलिपि समारोह है स्विफ्ट 3 और भी संगत साथ स्विफ्ट 4 साथ आता है। तो अगर आप इस तरह से उपयोग कर सकते हैं

guard let cgImage = imageView.image?.cgImage?.copy() else { 
     return 
    } 
let newImage = UIImage(cgImage: cgImage, 
         scale: imageView.image!.scale, 
         orientation: imageView.image!.imageOrientation) 
संबंधित मुद्दे