Tôi muốn chụp một phần cụ thể của màn hình iPhone. Tôi đã sử dụng UIGraphicsBeginImageContextWithOptions
, nhưng không thể chụp một phần màn hình với điều này. Xin hãy giúp tôi.ios cách chụp một phần cụ thể của màn hình
Trả lời
Bạn có thể chụp màn hình bằng cách sử dụng UIGraphicsGetImageFromCurrentContext
. Đã viết mã bên dưới từ bộ nhớ, do đó, có thể xảy ra lỗi. Vui lòng tự sửa nó.
- (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;
}
bạn có thể sử dụng mã này
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);
phương pháp khác để chụp ảnh màn hình rõ ràng;
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();
câu trả lời bằng cách @Superdev là đúng tại chỗ, những gì tôi muốn thêm là một mẹo nhỏ nếu bạn muốn chụp một cái nhìn mẹ và tránh subviews (theo quan điểm của lớp phủ đặc biệt) những gì bạn có thể làm là làm cho điều này subview một tài sản và sử dụng như sau
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;
nó một thủ thuật nhỏ, hy vọng ai đó sẽ tìm thấy nó hữu ích
Dưới đây là một phần mở rộng nhanh chóng trên UIView
mà một trong hai sẽ nắm bắt được toàn bộ quan điểm hoặc một khung trong tầm nhìn. Nó đưa vào tài khoản quy mô màn hình.
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
}
}
Xin chào, jDutton. Tôi yêu câu trả lời của bạn. Quyết định cập nhật mã của bạn cho Swift 3.0. –
Cảm ơn bạn rất nhiều !! – Jerome
SWIFT 3.0 Xcode8 Version đến từ @jDutton câu trả lời và làm việc cho tôi.
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
}
}
nếu bạn sụp đổ và nhận được thông báo sau:
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.
thử solution
Hy vọng điều này cho tiết kiệm thời gian của bạn!
- 1. iOS Ảnh chụp màn hình một phần của màn hình
- 2. Cách chụp một phần của màn hình
- 3. Công cụ chụp màn hình cho BlackBerry?
- 4. Trì hoãn ảnh chụp màn hình iOS
- 5. Chụp màn hình màn hình hiện tại của thiết bị
- 6. Chụp màn hình
- 7. Nhận ảnh chụp màn hình của một ứng dụng cụ thể
- 8. C#: làm thế nào để có một ảnh chụp màn hình của một phần của màn hình
- 9. Chụp màn hình của màn hình Hiện tại
- 10. Cách chụp ảnh màn hình một phần của Google Maps sử dụng JavaScript
- 11. Ngăn chụp ảnh màn hình trong ứng dụng iOS
- 12. Video chụp màn hình trong iOS theo chương trình
- 13. Lập trình có ảnh chụp màn hình của khu vực cụ thể
- 14. html5 chụp màn hình
- 15. Ảnh chụp màn hình Circumvent cho iOS 4
- 16. Ảnh chụp màn hình Webdriver
- 17. Cách tạo ảnh chụp màn hình của QWidget?
- 18. Làm thế nào tôi có thể lập trình tạo ảnh chụp màn hình của một trang Web cụ thể?
- 19. Chụp ảnh màn hình của Android OpenGL
- 20. Chụp màn hình của điều khiển WebBrowser
- 21. Chụp màn hình vào một ảnh bitmap
- 22. Cách lấy ảnh chụp màn hình của màn hình nền từ bộ đệm sau bằng DirectX
- 23. Làm mờ một phần cụ thể của hình nền
- 24. cách chụp màn hình của video hiện đang phát?
- 25. Màn hình Splash động của iOS
- 26. Chụp màn hình trong android
- 27. Chụp màn hình trong Go?
- 28. Cách chụp một phần màn hình và lưu nó vào BMP?
- 29. Hiển thị JFrame trên một màn hình cụ thể trong cấu hình màn hình kép
- 30. Làm cách nào để bạn chụp Ảnh màn hình của một trang web qua mã .Net?
bạn muốn chụp ảnh màn hình từ máy của mình hoặc bạn muốn chụp một khu vực trong ứng dụng của mình thông qua mã? – mAc
@mAc rõ ràng là anh ấy muốn làm điều đó với mã..không phải lý do tại sao anh ấy sử dụng UIGraphicsBeginImageContextWithOptions – Krishnabhadra