iPhone 화면의 특정 부분을 캡처하고 싶습니다. UIGraphicsBeginImageContextWithOptions
을 사용했지만이 부분을 캡처 할 수 없습니다. 도와주세요.ios 화면의 특정 부분을 캡처하는 방법
답변
UIGraphicsGetImageFromCurrentContext
을 사용하여 스크린 샷을 찍을 수 있습니다. 메모리에서 코드 아래에 쓴 것이므로 오류가 발생할 수 있습니다. 직접 수정하십시오.
- (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;
}
당신은 명확한 화면을 캡처하는이 코드
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);
에게 또 다른 방법을 사용할 수 있습니다;
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();
@Superdev에 의한 대답은 당신이 당신이 할 수있는 것은이 할 수있는 부모 뷰를 캡처하고 (특히 오버레이 뷰에서) 파단을 방지하려면 내가 추가 할 것은 약간의 트릭이며, 정확한 지점에 ITS의 작은 트릭
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;
다음 속성을 하위 뷰 및 사용, 사람이 찾을 희망이 유용
여기에 전체보기 또는 뷰 내에서 프레임을 캡처하거나 UIView
에 신속한 확장입니다. 화면 크기를 고려합니다.
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
}
}
안녕하세요, jDutton. 나는 너의 대답을 사랑했다. Swift 3.0에 대한 코드를 업데이트하기로 결정했습니다. –
정말 고마워요 !! – Jerome
SWIFT 3.0 Xcode8 버전 나를 위해 @jDutton 응답 작업에서 왔습니다. 당신이 충돌하고 다음과 같은 메시지를받을 경우
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
}
}
:
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.
당신의 시간 절약을위한이 solution
희망을 시도!
- 1. 화면의 일부를 캡처하는 방법
- 2. Silverlight에서 화면의 일부를 캡처하는 방법
- 3. 바탕 화면의 특정 부분을 확대하는 응용 프로그램
- 4. iOS 특정 화면의 느린 UI
- 5. Android UI : 나머지 부분을 유지하면서 화면의 한 부분을 바꾸는 방법
- 6. perl 해시의 특정 부분을 얻는 방법
- 7. 특정 크기의 self.view를 캡처하는 방법
- 8. 양식의 특정 부분을 업데이트하는 방법
- 9. UIMapView의 특정 부분을 캐시하는 방법
- 10. URI의 특정 부분을 얻는 방법
- 11. XML에서 특정 부분을 추출하는 방법
- 12. 화면의 특정 부분에 애니메이션 적용
- 13. 팝업 메시지 상자가 열려있을 때 화면의 나머지 부분을 고정하는 방법
- 14. CATransition을 사용하여 화면의 uiview 부분을 오른쪽에서 왼쪽으로 이동하는 방법
- 15. 화면의 특정 영역 확대
- 16. 아이폰 화면의 이미지를 특정 방식으로 채우는 방법?
- 17. 화면의 특정 부분에 스프라이트를 추가하는 방법
- 18. 특정 순서로 문자열 그룹에서 그룹을 캡처하는 방법
- 19. QML 드로잉 버퍼를 캡처하는 방법
- 20. 페이지의 특정 부분을 여는 방법 jquery를 사용합니다.
- 21. 문자열의 특정 부분을 가져 오는 방법
- 22. 웹 사이트의 특정 부분을 잡는 방법?
- 23. BufferedImage의 특정 부분을 확대
- 24. 문자열의 특정 부분을 바꿉니다.
- 25. NSMutableAray의 특정 부분을 선택하십시오.
- 26. 문자열의 특정 부분을 가져옵니다
- 27. 파일의 특정 부분을 인쇄하십시오.
- 28. Facebook iframe에서 특정 웹 사이트의 특정 부분을 표시하는 방법
- 29. C# 화면의 특정 지점을 클릭하십시오.
- 30. Windows에서 Ruby를 사용하여 화면의 일부를 캡처하는 방법은 무엇입니까?
컴퓨터에서 스크린 샷을 캡처하고 싶거나 코드를 통해 앱 영역을 캡처하고 싶습니까? – mAc
@mAc 분명히 그는 코드로 그것을하고 싶다. 왜 UIGraphicsBeginImageContextWithOptions를 사용해야 할까? – Krishnabhadra