4

次のコードを使用してスクリーンショットを撮っています。

    // Returns 1024x768 for iPad Retina
    CGSize screenDimensions = [[UIScreen mainScreen] bounds].size;

    // Create a graphics context with the target size
    // (last parameter takes scale into account)
    UIGraphicsBeginImageContextWithOptions(screenDimensions, NO, 0);

    // Render the view to a new context
    CGContextRef context = UIGraphicsGetCurrentContext();
    [myView.layer renderInContext:context];

    // Save to Camera Roll
    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
    UIImageWriteToSavedPhotosAlbum(screenshot, self, nil, nil);

    UIGraphicsEndImageContext();

これは機能しますが、iPad の網膜解像度ではないカメラ ロールの画像になるというユーザーからの報告があります。むしろ、iPad の非 Retina 解像度のように見えます。(これをテストするためのiPad 3はありません)。

私が間違っていることは他にありますか?

4

2 に答える 2

2

それで、私はついに物理的なiPad Retinaを手に入れました、そして私が投稿したコードは元々うまく機能します。結果の画像は、Retinaのフル解像度で表示されます。

于 2012-05-25T21:09:54.880 に答える
0

これが私が使用しているコードで、iPad 3 には問題がないようです。iOS シミュレーターで Retina iPad を使用して確認することもできます。私のコードは、ファイルをドキュメントディレクトリにも保存しています。必要に応じて変更できます。

    CGSize screenSize = [[UIScreen mainScreen] applicationFrame].size;
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
    CGContextRef ctx = CGBitmapContextCreate(nil, screenSize.width, screenSize.height, 8, 4*(int)screenSize.width, colorSpaceRef, kCGImageAlphaPremultipliedLast);
    CGContextTranslateCTM(ctx, 0.0, screenSize.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);

    [(CALayer*)self.view.layer renderInContext:ctx];

    CGImageRef cgImage = CGBitmapContextCreateImage(ctx);
    UIImage *image = [UIImage imageWithCGImage:cgImage];
    CGImageRelease(cgImage);
    CGContextRelease(ctx);
    CGColorSpaceRelease(colorSpaceRef);
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filePath = [NSString stringWithFormat:@"%@/myscreenshot.jpg", docDir];

    [UIImageJPEGRepresentation(image, 1.0) writeToFile:filePath atomically:YES];
于 2012-05-22T14:00:29.390 に答える