Utworzyłem wersję Swift tej klasy: https://github.com/bennythemink/ZoomRotatePanImageView/blob/master/ZoomRotatePanImageView.m Działa dobrze. Teraz chcę zapisać zmodyfikowany obraz do pliku. Chodzi o to, że chcę go zapisać w pełnej rozdzielczości, a także chcę zapisać obszar, który jest widoczny tylko dla użytkownika.Zapisywanie edytowanego obrazu po powiększeniu, obróceniu i panoramowaniu
Pokażę Ci prosty przykład:
Jak to wygląda w mojej aplikacji. Obraz jest jednym z kilku próbek w symulatorze iOS. Większość z nich jest poza ekranem. Chcę tylko widoczną część.
Po zapisaniu bez przycinania wygląda to tak:
tej pory tak dobrze po wycinek byłoby miłe.
Ale teraz zróbmy kilka zmian:
Po zapisaniu:
Wygląda na to zwerbowany przez niewłaściwym przegubu. Jak mogę to naprawić?
Oto mój kod do oszczędzania:
UIGraphicsBeginImageContextWithOptions(image.size, false, 0)
let context = UIGraphicsGetCurrentContext()
let transform = imageView.transform
let imageRect = CGRectMake(0, 0, image.size.width, image.size.height)
CGContextSetFillColorWithColor(context, UIColor.blueColor().CGColor) //for debugging
CGContextFillRect(context, imageRect)
CGContextConcatCTM(context, transform)
image.drawInRect(imageRect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
Jest prostszy sposób, aby go osiągnąć:
wyjścieUIGraphicsBeginImageContextWithOptions(imageContainer.bounds.size, false, 0)
self.imageContainer.drawViewHierarchyInRect(imageContainer.bounds, afterScreenUpdates: true)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
Jednak obraz ma rozmiar widoku nie rzeczywisty obraz i chcę go w całości rozkład.
Dzięki za odpowiedź, ale jak powiedziałem, chcę obrazu w pełnej rozdzielczości . Już napisałem rozwiązanie w rozdzielczości ekranu, zobacz na dole mojego pytania. image! .drawInRect (imageView! .bounds) - powoduje to, że obraz 4k ma rozmiar obrazu, więc zależy to od rozmiaru ekranu. – Makalele
Dzięki, myślę, że jesteśmy blisko. Wygląda prawie tak, jak powinien. Problem polega jednak na tym, że należy go odpowiednio przyciąć do widocznej tylko części ekranu (a dokładniej nieco mniej - aby dopasować obraz iPhone'a). Proszę spojrzeć na kod całej klasy: http://pastebin.com/6UUj1B0w w prepareForSegue to Twój kod. topImage to iPhone, który można zobaczyć na zrzucie ekranu. Możesz go łatwo przetestować na nowym projekcie w pustym kontrolerze widoku. Na dole jest jedyna metoda - pokazuje, jak powinna wyglądać. – Makalele
ZoomRotatePanImageView jest zawsze dopasowany do kształtu. Nie trzeba więc ustawiać ramek dla topImageView i imageView, zachowując pełny rozmiar ekranu. Ustaw tryb zawartości jako spas pasujący do twojego topImageView. Zrzuty ekranu z mojej próbki są załączone, działają zgodnie z oczekiwaniami. –