1

スクリーンキャプチャをカメラロールに取り込むためにインターネットから取得したコードが少しあります。これはうまく機能します。ここにあります。

 CGRect screenRect = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.bounds.size.width, self.view.bounds.size.height);
UIGraphicsBeginImageContext(screenRect.size);

CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);

[self.view.layer renderInContext:ctx];

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil);
UIGraphicsEndImageContext();

すべてがiPhoneで完璧に機能しますが、今はiPadで状況を変えています。画面全体とは異なる長方形をキャプチャする必要があるため、次のように別の長方形を指定しています。

CGRect screenRect;
switch (runningOniPad) {
    case 0: // running on iPhone..
        screenRect = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.bounds.size.width, self.view.bounds.size.height);
        break;

    default: // yes, running on iPad..
        screenRect = CGRectMake(56, 478, 662, 262);

        break;
}

カメラロールで取得している長方形はSIZEimで指定されていますが、その原点は(0,0)のようです...おそらく[self.view.layer renderInContext:ctx]; ??

誰かが助けてくれるなら、きっと感謝します、どうもありがとうございました:)

4

1 に答える 1

2

ジェフ、そこで何が起こっているかについての説明:

「ctx」は小さな「オフスクリーン作業領域」を作ります。

メモ帳やスケッチブロックと考えてください...

わかった?

実際、「ctx」を使用すると、そのメモ帳またはスケッチブロックを参照できます。

さて、あなたは尋ねます、そのスケッチブロックはどれくらいの大きさですか? 実際、元のコード作成者は、そのスケッチブロックを現在の画面と同じサイズにしました。

「screenRect」と呼ばれる変数の名前が悪いことに注意してください。howBigWillOurSketchBlockBe という名前にする必要があります。

これまでのところ意味がありますか?

そのため、まずコードを調べて、screenRect を howBigWillOurSketchBlockBe に変更します。すべて完了。

さて、ご覧のとおり、新しいコードで行っていることは、 sketchblock のサイズを変更することだけです。

理にかなっていますか?

これで、「renderInContext」という行が表示されます...これは、最初に述べたものを self.view.layer に取り、それを sketchblock にレンダリングします

もちろん、self.view.layer の左下から使い始めます。

スケッチブロックがかなり小さくなったので (変数 howBigWillOurSketchBlockBe を見てください)、何が起こっているかがわかります!

したがって、理解すべき重要なことは、「howBigWillOurSketchBlockBe」(以前は不適切な「screenRect」という名前でした)は、単純に、落書きするために設定した SKETCHBLOCK のサイズにすぎないということです。

さて、あなたは問題を解決する方法を考えています!このページのオンドリを見下ろす必要があると思いますが、

http://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/drawingwithquartz2d/dq_affine/dq_affine.html

少し変換を適用すると効果がありますか? CGContextTranslateCTM ...

それが役に立てば幸い!

于 2011-03-20T09:06:04.620 に答える