iOS图像混合,如融合应用

时间:2015-10-23 18:19:40

标签: ios objective-c core-graphics cgcontext core-image

我想在Fused App正在做的时候混合两个UIImages:

https://itunes.apple.com/us/app/fused-double-exposure-video/id869117407?mt=8

Fused正在做什么,它需要两个图像(前景和背景)并应用混合,使背景保持不变,用户可以移动,旋转和放大。调整前景图像的大小。我附上两张图片以便更好地理解。我想在我的应用程序中实现相同的行为。我已经尝试了所有CoreImage& CoreGraphics但我无法做到这一点。所有人都需要帮助。

第一个屏幕:应用Overly blend模式后。

Image After Blending!

第二个屏幕:更改前景图片的大小:

Image after arranging the foreground image

我的结果 Screenshot of the app

1 个答案:

答案 0 :(得分:0)

您可以使用using steps described here来实现您想要的效果,我之前使用过它并且效果很好。 CHTStickerView是一个可移动,可调整大小,可旋转的UIView,带有一根手指,可完全自定义。

使用CHTStickerView作为前景图片,UIImageView作为背景图片。

所以你的代码应该是这样的:

- (void)viewDidLoad {
  [super viewDidLoad];

  //background
  UIImageView *backgroundImageView = [[UIImageView alloc] initWithFrame:self.view.frame];
  [backgroundImageView setImage:@"background.png"];
  [self.view addSubview:backgroundImageView];

  //foreground
  UIImageView *foregroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 150, 150)];
  [foregroundImageView setImage:[UIImage imageNamed:@"foreground.png"]];

  CHTStickerView *stickerView = [[CHTStickerView alloc] initWithContentView:foregroundImageView]; //set your foreground image as content in CHTStickerView
  stickerView.center = self.view.center;
  stickerView.delegate = self;
  [stickerView setImage:[UIImage imageNamed:@"Close"] forHandler:CHTStickerViewHandlerClose];
  [stickerView setImage:[UIImage imageNamed:@"Rotate"] forHandler:CHTStickerViewHandlerRotate];
  [self.view addSubview:stickerView];
}

<强>更新

好吧我下载了应用程序并检查了混合。我认为应用程序正在做的只是使用滑动条获取前景图像的不透明度值并在背景图像上绘制前景图像(不透明度集)。

所以要设置UIImage的不透明度,请检查:CHTStickerView

要绘制并在另一张图片上进行图像检查:How to set the opacity/alpha of a UIImage?

总结一下,您需要做的是:

1)在用户旋转并调整大小

后获取CHTStickerView的位置和大小

2)从UIImage获取CHTStickerView,从滑块获取不透明度值

3)将不透明度设置为图像并在背景图像上绘制图像

希望这有帮助!