【问题标题】:Iphone sdk save drawings without whole contextIphone sdk 在没有完整上下文的情况下保存图纸
【发布时间】:2011-11-29 16:22:27
【问题描述】:

我想从我的 iPhone 应用程序中截取我的视图屏幕。我有白色背景视图,并使用此方法在该视图的图层上画了一条线。

- (void)draw {
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);
    if (self.fillColor) {
        [self.fillColor setFill];
        [self.path fill];
    }
    if (self.strokeColor) {
        [self.strokeColor setStroke];
        [self.path stroke];
    }

    CGContextRestoreGState(context);
}



- (void)drawRect:(CGRect)rect {
    // Drawing code.
    for (<Drawable> d in drawables) {
        [d draw];
    }
    [delegate drawTemporary];
}

我使用委托方法在图层上画线。 这是我从中获得帮助的项目链接。 https://github.com/search?q=dudel&type=Everything&repo=&langOverride=&start_value=1

现在,当我使用以下上下文方法仅保存绘图时,我成功地保存了它而没有白色背景。

drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

但是当我使用贝塞尔路径的以下方法时,我无法保存没有白色背景的绘图,它会保存整个屏幕,即该绘图及其背景。

UIGraphicsBeginImageContext(self.view.bounds.size);
    [dudelView.layer renderInContext:UIGraphicsGetCurrentContext()];
    //UIImage *finishedPic = UIGraphicsGetImageFromCurrentImageContext();

那么任何人都可以帮助我如何将绘图仅保存在此应用中。

【问题讨论】:

  • 我也面临同样的问题

标签: ipad ios4 mkmapview mapkit core-location


【解决方案1】:

(您已将此标记为与 MapKit 相关,但未提及 MapKit。)

你为什么不把你的绘图序列分成三个块?

  1. 如您所述,将路径绘制到图像上下文中并获取 UIImage。
  2. 绘制背景颜色。
  3. 绘制 UIImage。

然后您也可以使用 UIImage 作为您的“屏幕截图”。

我还应该注意,如果您不希望在捕获的 UIImage 中唯一 的东西是背景颜色,那么您最好创建一个 UIImageView,设置它的背景颜色 (-setBackgroundColor:) ,并将其图像设置为您的 UIImage。

UIImageView 内部进行了许多优化,使其显示图形的性能远高于使用自定义 -drawRect: 实现所能获得的性能。

【讨论】:

    【解决方案2】:

    为什么不直接保存 drawables 数组?这些都是没有底层图像的图纸:)

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多