ONEに複数のUIImageViewsを「フラット化」にどのように?
-
12-09-2019 - |
質問
私は、これは容易な作業ではありませんが、私はそれの上にある別のUIImageビューでUIImageViewを組み合わせたり、平らにする必要があります感じています。例えば:私は2つUIImageViewsを持っています。それらの一つは、芝生フィールド(1200×1200ピクセル)のUIImageを有します。他のバスケットボール(128×128画素)のUIImageであり、バスケットボールが芝生のフィールドにあるように見えるように草原の映像の上に配置されています。私は何とか2枚の画像を結合する必要があることを意味私の写真アルバムへの単一の画像ファイルとして重畳UIImageViewsを保存できるようにしたいです。これはどのように達成されるだろうか? (注:I 1200 X 1600個のピクセルの大きさを維持することを望むようにスクリーンショットを撮影する(320×480ピクセル)が許容される溶液ではない
。 QUESTION:
をどのように私は1つに複数のUIImageViewsを平らにし、サイズ/解像度を維持しながら、結果の画像を保存することができます。の
解決
これは、すべてのビューをとり、そこからUIImageを作ります。任意のビューとそれはサブビューが表示またはディスクに保存することができますUIImageに「フラット化」されるのです。
- (UIImage*)imageFromView{
UIImage *image;
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
他のヒント
なぜあなたはちょうど互いの上に背景バッファにオリジナルUIImagesを描画して、ファイルに合成画像を書きませんか?以下は、同じバッファに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);
所属していません StackOverflow