【问题标题】:Overlay an image over another image in iOS在 iOS 中将图像覆盖在另一个图像上
【发布时间】:2011-11-10 21:33:45
【问题描述】:

我在我的 iOS 应用中显示来自 youtube 的缩略图。点击后会转到 youtube。

我需要一种在这些图像上叠加播放按钮的方法。这样做最直接的方法是什么?

此外,图像是远程加载到桌子上的,因此性能是一个重要的考虑因素

【问题讨论】:

  • 如果我们把覆盖图像放在缩略图图像视图之上?你试过了吗?我正在尝试同样的事情并对您的解决方案感到好奇..

标签: ios objective-c image


【解决方案1】:

如果您关心表格滚动性能,请检索缩略图并在其上绘制播放按钮。

+(UIImage*) drawImage:(UIImage*) fgImage
              inImage:(UIImage*) bgImage
              atPoint:(CGPoint)  point
{
    UIGraphicsBeginImageContextWithOptions(bgImage.size, FALSE, 0.0);
    [bgImage drawInRect:CGRectMake( 0, 0, bgImage.size.width, bgImage.size.height)];
    [fgImage drawInRect:CGRectMake( point.x, point.y, fgImage.size.width, fgImage.size.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

【讨论】:

  • 感谢@jano!会试试这个。实际上,我很惊讶在图像上绘画会很有效
  • 注意创建上下文时使用的0.0。使用 0.0 使大小取决于主屏幕的比例。
  • 如果有人想将一张图片放在另一张图片上,则不需要点。
【解决方案2】:

Swift 2.2 版本

  static func drawImage(image foreGroundImage:UIImage, inImage backgroundImage:UIImage, atPoint point:CGPoint) -> UIImage{
    UIGraphicsBeginImageContextWithOptions(backgroundImage.size, false, 0.0)
    backgroundImage.drawInRect(CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height))
    foreGroundImage .drawInRect(CGRectMake(point.x, point.y, foreGroundImage.size.width, foreGroundImage.size.height))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage
  }

【讨论】:

    【解决方案3】:

    这就是我所做的。 cameraImg 是我从相机获取的图像,其他三个图像是我在 cameraImg 上显示的静态图像。在这种情况下,大小定义了我们将要开始的上下文的大小。图像在 DrawInRect 方法定义的矩形中绘制。确保结束上下文并完成。

    UIImage *cameraImg = image;
    
    UIImage *leftImg = [UIImage imageNamed:@"apple.jpeg"];
    
    UIImage *rightImg = [UIImage imageNamed:@"Cloud.png"];
    
    UIImage *middleImg = [UIImage imageNamed:@"mario.jpeg"];
    
    CGSize size = CGSizeMake(cameraImg.size.width, cameraImg.size.height);
    
    UIGraphicsBeginImageContext(size);
    
    [cameraImg drawInRect:CGRectMake(0, 0, self.view.window.frame.size.width, self.view.window.frame.size.height)];
    
    [leftImg drawInRect:CGRectMake(x, y, width, height)];
    
    [rightImg drawInRect:CGRectMake(x, y, width, height)];
    
    [middleImg drawInRect:CGRectMake(x, y, width, height)];
    
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,finalImage.size.width, finalImage.size.height)];
    
    imageView.image = finalImage;
    
    [self.view addSubview:imageView];
    

    【讨论】:

      【解决方案4】:

      Swift 3.x

      func drawImage(image foreGroundImage:UIImage, inImage backgroundImage:UIImage, atPoint point:CGPoint) -> UIImage {
          UIGraphicsBeginImageContextWithOptions(backgroundImage.size, false, 0.0)
          backgroundImage.draw(in: CGRect.init(x: 0, y: 0, width: backgroundImage.size.width, height: backgroundImage.size.height))
          foreGroundImage.draw(in: CGRect.init(x: point.x, y: point.y, width: foreGroundImage.size.width, height: foreGroundImage.size.height))
          let newImage = UIGraphicsGetImageFromCurrentImageContext()
          UIGraphicsEndImageContext()
          return newImage!
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-04
        • 2019-12-05
        • 1970-01-01
        • 2014-07-05
        • 1970-01-01
        相关资源
        最近更新 更多