9

コントロールとのUIView両方を使用するがあります。そのビューのスクリーンショットをプログラムで取得したいと思います。UIKitOpenGL

を使用するUIGraphicsGetImageFromCurrentImageContext()と、OpenGL内容が空白になります。このメソッドを使用するglReadPixels(...)と、UIKitのコンテンツが空白になります。

完全なスクリーンショットを撮る方法として私は混乱しています。ありがとうございました!

4

8 に答える 8

8

use following code to take screen shot

    -(UIImage *) screenshot
     {

          CGRect rect;
          rect=CGRectMake(0, 0, 320, 480);
          UIGraphicsBeginImageContext(rect.size);

          CGContextRef context=UIGraphicsGetCurrentContext();
          [self.view.layer renderInContext:context];

          UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
          UIGraphicsEndImageContext();

          return image;
     }
于 2012-12-05T12:16:02.837 に答える
5
-(UIImage *) screenshot
{
CGImageRef UIGetScreenImage(void);
CGImageRef screen = UIGetScreenImage();
UIImage* screenImage = [UIImage imageWithCGImage:screen];
CGImageRelease(screen); // you need to call this.
return screenImage;
}
于 2013-09-05T08:27:38.057 に答える
5

さて、プログラムでiPhoneの画面をキャプチャする方法はほとんどありません

  1. UIKIT の使用http://developer.apple.com/library/ios/#qa/qa1703/_index.html

  2. AVFoundation フレームワークの使用http://developer.apple.com/library/ios/#qa/qa1702/_index.html

  3. OpenGL ES の使用 http://developer.apple.com/library/ios/#qa/qa1704/_index.html

  4. iOS 7 以降では、なぜ iOS 7 でプログラムによって作成されたスクリーンショットの見栄えが悪いのですか?も使用できます。

  5. UIWindow の使用

    CGRect screenRect = [[UIScreen mainScreen] bounds];
    UIGraphicsBeginImageContext(screenRect.size);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [[UIColor blackColor] set];
    CGContextFillRect(ctx, screenRect);
    [self.window.layer renderInContext:ctx];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
  6. UIView の使用

    UIGraphicsBeginImageContext(self.view.frame.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viImage=UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    

これらの 6 つのオプションのうち、最初の方法は真のピクセル データを含む画像を提供するため、コピーと貼り付けと圧縮レベルの適用に非常に便利であることがわかりました。API には SDK が付属しているため、オプション 4 も気に入っています。

于 2013-07-12T10:17:46.820 に答える
2

画質を落とさずに結果 Uiimage を取得します

    - (UIImage *)captureView:(UIView *)view {
     UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
     [view.layer renderInContext:UIGraphicsGetCurrentContext()];
     UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
     UIGraphicsEndImageContext();
     return img;
     }
于 2012-11-08T07:37:45.120 に答える
1
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *data = [UIImagePNGRepresentation(image) retain];
UImage *screenShot = [UIImage imageWithData:data];
于 2012-11-08T07:45:37.827 に答える
0

プログラムで簡単なスクリーンショットを撮る方法は次のとおりですUIImage。他のオブジェクトに使用したい場合は、 に置き換えてUIImageください。

.hファイル に追加NSData *Data;してから、.mファイルにこれをコードに追加します

UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *attachimage = [[UIImage alloc]initWithData:Data];
UIImage *viImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
attachimage = viImage;
UIImageWriteToSavedPhotosAlbum(viImage, nil, nil, nil);
于 2012-11-08T07:32:54.800 に答える
0

OpenGL コンテンツがビュー内のどこにあるかがわかります。glReadPixelsそのため、結果をUIKit のスナップショットにコピーするのは簡単です。

于 2012-11-08T08:05:38.100 に答える
0

多分..ここから何かを使うことができますか

- https://stackoverflow.com/questions/12413460/cocos2d-2-0-screenshots-on-ios-6

そしてここ...

iOS 6.0 のこのコードで glReadPixels() が失敗するのはなぜですか?

于 2012-11-08T14:04:38.513 に答える