gpt4 book ai didi

ios - 将多个图像合并为 1

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:33 26 4
gpt4 key购买 nike

我正在尝试将相机拍摄的照片与其他一些预设图像叠加。问题是,来自相机的图片可能是 8MP,这在内存使用方面是巨大的。一些叠加层可能会尝试覆盖整个图像。

我尝试了多种方法将它们全部合并为一张图片。

UIGraphicsBeginImageContextWithOptions(_imageView.image.size, NO, 1.0f);
[_containerView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

CGContextDrawImage(UIGraphicsGetCurrentContext(), (CGRect){CGPointZero, _imageView.image.size}, _imageView.image.CGImage);
CGContextDrawImage(UIGraphicsGetCurrentContext(), (CGRect){CGPointZero, _imageView.image.size}, *other image views*);

UIImage* image = _imageView.image;
CGImageRef imageRef = image.CGImage;

size_t imageWidth = (size_t)image.size.width;
size_t imageHeight = (size_t)image.size.height;

CGContextRef context = CGBitmapContextCreate(NULL, CGImageGetWidth(imageRef), CGImageGetHeight(imageRef), CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), CGImageGetColorSpace(imageRef), CGImageGetBitmapInfo(imageRef));

CGRect rect = (CGRect){CGPointZero, {imageWidth, imageHeight}};
CGContextDrawImage(context, rect, imageRef);
CGContextDrawImage(context, rect, **other images**);
CGImageRef newImageRef = CGBitmapContextCreateImage(context);
CGContextRelease(context);

UIImage* resultImage = nil;

NSURL* url = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"x.jpg"]];
CFURLRef URLRef = CFBridgingRetain(url);
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(URLRef, kUTTypeJPEG, 1, NULL);
if (destination != NULL)
{
CGImageDestinationAddImage(destination, newImageRef, NULL);
if (CGImageDestinationFinalize(destination))
{
resultImage = [[UIImage alloc] initWithContentsOfFile:url.path];
}
CFRelease(destination);
}
CGImageRelease(newImageRef);

所有这些都有效,但本质上是将当前内存使用量加倍。

有没有办法在不需要创建新上下文的情况下将它们组合在一起?也许将所有图像保存在文件系统中并在那里进行合并而不实际消耗大量内存?或者甚至可以将每个图 block 渲染到文件系统图 block 中?

任何建议或指示我从哪里去?

谢谢

最佳答案

检查以下代码。您可以将多个图像发送到以下方法,但是由于您面临内存问题,我建议您重复调用相同的方法来合并多个图像。不过,此过程可能需要更多时间。

-(CGImageRef )mergedImageFromImageOne:(UIImage *)imageOne andImageTwo:(UIImage *)imageTwo
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CGSize imageSize = imageOne.size;

UIGraphicsBeginImageContext(sizeVideo);

[imageOne drawInRect:CGRectMake(0,0,imageSize.width,imageSize.height)];

[imageTwo drawInRect:CGRectMake(0,0,imageSize.width,imageSize.height) alpha:1];

CGImageRef imageRefNew = CGImageCreateWithImageInRect(UIGraphicsGetImageFromCurrentImageContext().CGImage, CGRectMake(0,0,imageOne.width,imageOne.height));

UIGraphicsEndImageContext();

[pool release];

return imageRefNew;
}

希望这对您有所帮助。

关于ios - 将多个图像合并为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15540401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com