8

これは簡単な作業ではないと感じていますが、UIImageViewをその上にある別のUIImageビューと組み合わせるかフラット化する必要があります。例:2つのUIImageViewがあります。そのうちの1つには、芝生のフィールド(1200 x 1200ピクセル)のUIImageがあります。もう1つはバスケットボールのUIImage(128 x 128ピクセル)で、バスケットボールが芝生の上にあるように見えるように、芝生のフィールドの画像の上に配置されます。重ね合わせたUIImageViewsを1つの画像ファイルとしてフォトアルバムに保存できるようにしたいので、2つの画像を何らかの方法で組み合わせる必要があります。これはどのように達成されますか?(注:1200 x 1600ピクセルのサイズを維持したいので、スクリーンショット(320 x 480ピクセル)を撮ることは受け入れられない解決策です。

質問:
サイズ/解像度を維持しながら、複数のUIImageViewを1つにフラット化し、結果の画像を保存するにはどうすればよいですか。

4

2 に答える 2

5

元のUIImageをバックグラウンドバッファに重ねて描画し、結合した画像をファイルに書き込んでみませんか?以下は、2つの画像を同じバッファに描画する方法の例です。

CGImageRef bgimage = [bguiimage CGImage];
width = CGImageGetWidth(bgimage);
height = CGImageGetHeight(bgimage);

// Create a temporary texture data buffer
GLUbyte* data = (GLubyte *) malloc(width * height * 4);
assert(data);

// Draw image to buffer
CGContextRef ctx = CGBitmapContextCreate(data, width, height, 8, width * 4, CGImageGetColorSpace(image), kCGImageAlphaPremultipliedLast);
assert(ctx);

// Flip image upside-down because OpenGL coordinates differ
CGContextTranslateCTM(ctx, 0, height);
CGContextScaleCTM(ctx, 1.0, -1.0);

CGContextDrawImage(ctx, CGRectMake(0, 0, (CGFloat)width, (CGFloat)height), bgimage);

CGImageRef ballimage = [balluiimage CGImage];
bwidth = CGImageGetWidth(ballimage);
bheight = CGImageGetHeight(ballimage);

float x = (width - bwidth) / 2.0;
float y = (height - bheight) / 2.0;
CGContextDrawImage(ctx, CGRectMake(x, y, (CGFloat)bwidth, (CGFloat)bheight), ballimage);

CGContextRelease(ctx);
于 2009-08-10T06:50:54.987 に答える
3

これにより、任意のビューが取得され、UIImageが作成されます。すべてのビューとそのサブビューは、表示またはディスクに保存できるUIImageに「フラット化」されます。

  - (UIImage*)imageFromView{

    UIImage *image;

    UIGraphicsBeginImageContext(self.view.bounds.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;

}
于 2009-08-10T08:21:59.997 に答える