Chcę przechwycić konkretną część ekranu iPhone'a. Użyłem UIGraphicsBeginImageContextWithOptions
, ale nie udało mi się uchwycić części ekranu. Proszę, pomóż mi.ios jak uchwycić konkretną część ekranu
Odpowiedz
Możesz wykonać zrzut ekranu przy użyciu UIGraphicsGetImageFromCurrentContext
. Napisany poniżej kod z pamięci, więc możliwe błędy. Popraw to sam.
- (UIImage*)captureView:(UIView *)yourView {
CGRect rect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[yourView.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
można użyć tego kodu
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGRect rect = CGRectMake(250,61 ,410, 255);
CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect);
UIImage *img = [UIImage imageWithCGImage:imageRef];
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
CGImageRelease(imageRef);
Inny sposób uchwycić wyraźny zrzut ekranu;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions(self.captureView.frame.size, NO, [UIScreen mainScreen].scale);
else
UIGraphicsBeginImageContext(self.captureView.frame.size);
[self.captureView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
[viewImage drawInRect:CGRectMake(0.0, 0.0, 640,960)];
//NSData*m_Imgdata=UIImagePNGRepresentation(viewImage);
NSData*m_Imgdata=UIImageJPEGRepresentation(viewImage, 1.0);
// UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
UIGraphicsEndImageContext();
odpowiedź przez @Superdev jest tuż na miejscu, co chcę dodać to mały trick, jeśli chcesz uchwycić widok rodzica i uniknąć subviews (w szczególności widzenia nakładki), co można zrobić, to zrobić to podrzędny obiekt i użyć następujących
CGFloat width = CGRectGetWidth(self.view.bounds);
CGFloat height = CGRectGetHeight(self.view.bounds);
_overlayView.hidden = YES;
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGRect rect = CGRectMake(0,0 ,width, height);
CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect);
UIImage *img = [UIImage imageWithCGImage:imageRef];
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
CGImageRelease(imageRef);
_overlayView.hidden = NO;
jej mała sztuczka, nadzieję, że ktoś znajdzie to użyteczne
Oto szybka rozbudowa na UIView
które albo przechwycić cały widok lub ramkę w widoku. Bierze pod uwagę skalę ekranu.
extension UIView {
func imageSnapshot() -> UIImage {
return self.imageSnapshotCroppedToFrame(nil)
}
func imageSnapshotCroppedToFrame(frame: CGRect?) -> UIImage {
let scaleFactor = UIScreen.mainScreen().scale
UIGraphicsBeginImageContextWithOptions(bounds.size, false, scaleFactor)
self.drawViewHierarchyInRect(bounds, afterScreenUpdates: true)
var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
if let frame = frame {
// UIImages are measured in points, but CGImages are measured in pixels
let scaledRect = CGRectApplyAffineTransform(frame, CGAffineTransformMakeScale(scaleFactor, scaleFactor))
if let imageRef = CGImageCreateWithImageInRect(image.CGImage, scaledRect) {
image = UIImage(CGImage: imageRef)
}
}
return image
}
}
Witaj, jDutton. Kochałem twoją odpowiedź. Postanowiliśmy zaktualizować Twój kod do Swift 3.0. –
Dziękuję bardzo! – Jerome
SWIFT 3,0 Xcode8 Wersja pochodzą z @jDutton odpowiedź i pracy dla mnie.
extension UIView {
func imageSnapshot() -> UIImage {
return self.imageSnapshotCroppedToFrame(frame: nil)
}
func imageSnapshotCroppedToFrame(frame: CGRect?) -> UIImage {
let scaleFactor = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(bounds.size, false, scaleFactor)
self.drawHierarchy(in: bounds, afterScreenUpdates: true)
var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
if let frame = frame {
// UIImages are measured in points, but CGImages are measured in pixels
let scaledRect = frame.applying(CGAffineTransform(scaleX: scaleFactor, y: scaleFactor))
if let imageRef = image.cgImage!.cropping(to: scaledRect) {
image = UIImage(cgImage: imageRef)
}
}
return image
}
}
jeśli upaść i pojawia się następujący komunikat:
GContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
spróbować tej solution
Nadzieja na oszczędność czasu!
- 1. ekranu tylko część ekranu - Swift
- 2. Pierwsze konkretną część tekstu w ścisłym tekstu
- 3. ios Odkodować część obrazu
- 4. Orientacja ekranu ios
- 5. Opóźnienie zrzut ekranu iOS
- 6. Jak przechwycić część ekranu i zapisać do BMP?
- 7. Jak uchwycić RCurl wyjście opisowy
- 8. Jak mogę wykryć konkretną wersję systemu iOS z jquery?
- 9. iOS - Zmień temperaturę kolorów ekranu
- 10. Błąd iOS 10 Uruchomienie ekranu
- 11. iOS Zrób kilka zrzutów ekranu
- 12. Przechwytywanie ekranu
- 13. Część fragmentu wewnątrz ViewPager uzyskiwanie obcięte na dole ekranu (Android)
- 14. nie może uchwycić Mapa google z html2canvas
- 15. Jak mogę uchwycić wyjście standardowe procesu potomnego?
- 16. Jak poprawnie uchwycić zwracaną wartość polecenia unix?
- 17. Jak uchwycić Wyprowadzenie Curl ze skryptu Pythona
- 18. PHP: Jak uchwycić limit czasu na dio_read()?
- 19. Jak poprawnie uchwycić wyjątki RuntimeException z Executorów?
- 20. React-bootstrap jak uchwycić wartość listy rozwijanej
- 21. Jak uchwycić ustalone warunki formuły R?
- 22. Jak uruchomić konkretną wersję Meteor?
- 23. Zrzut ekranu iOS SDWebage w UITableViewCell
- 24. renderInContext nie uchwycić obróconych subviews
- 25. iOS: Przesuwanie ekranu włączania/wyłączania UIView
- 26. Obrót ekranu IOS 6 bez użycia storyboardu
- 27. Pobierz rozmiar ekranu na iOS 8
- 28. SDK do udostępniania ekranu dla iOS
- 29. Aplikacja iOS nie wypełnia ekranu iPhone'a
- 30. Zrzut ekranu Circumvent dla iOS 4
chcesz zrobić zrzut ekranu z urządzenia lub chcesz przechwycić obszar w aplikacji za pomocą kodu? – mAc
@mAc oczywiście chce to zrobić z kodem ... jeśli nie, to dlaczego używa UIGraphicsBeginImageContextWithOptions – Krishnabhadra