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によって答えは適切な場所にありますが、親ビューをキャプチャし、(特定のオーバーレイビューで)サブビューを避けたい場合は、私が追加したいことは少しトリックで、あなたは何ができるか、この作成されましたプロパティをサブビューと、次の
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. QMLで画面の特定の部分をキャプチャする方法は?
- 2. ページの一部分のhtml2canvas画面キャプチャ
- 3. 画面キャプチャ方法は
- 4. 画面をキャプチャして画像内の特定のウィンドウを無視する方法
- 5. 画面の一部をキャプチャしてBMPに保存する方法は?
- 6. iOS 10でプライベートAPIを使用して画面をキャプチャする方法は?
- 7. 画像の特定の部分を取得する(画像)
- 8. Androidの画面部分ストリーム
- 9. 画像から特定の部分のみを抽出する方法は?
- 10. iOS UILocalNotification特定の画面を起動する
- 11. Androidのアクティビティ画面の全体像をキャプチャする方法
- 12. HTML5のキャプチャ画面
- 13. 画面をキャプチャして画面情報を検出する方法
- 14. 画面をキャプチャしてXamarin.Macのファイルに保存する方法
- 15. UIImageVIewの特定の部分にイメージを配置する方法
- 16. Pythonスクリプトの特定の部分をループする方法
- 17. コードの特定の部分を「アクティブにする」方法
- 18. window.print()でページの特定の部分を印刷する方法
- 19. UIviewの特定の部分をアニメーション化する方法
- 20. フォームの特定の部分を更新する方法
- 21. リストの特定の部分を表示する方法は? (Python)
- 22. perlハッシュの特定の部分を取得する方法
- 23. UIMapViewの特定の部分をキャッシュする方法
- 24. ココア画面キャプチャ?
- 25. キャプチャ画面
- 26. iOSで特定の画像をドラッグする方法は?
- 27. フォトライブラリ(iOS)内のGIF画像を特定する方法
- 28. XMLの特定の部分のみに署名する方法
- 29. 画面の残りの部分を見て、テキストを追加する方法
- 30. エミュレータの画面(アンドロイド)をキャプチャ:
あなたのマシンからスクリーンショットをキャプチャするか、コード内でアプリ内の領域をキャプチャしたいですか? – mAc
@mAc明らかに、彼はなぜあなたがUIGraphicsBeginImageContextWithOptionsを使用しているのかをコードでやりたいのですが – Krishnabhadra