0

我有下一个代码,每次用户触摸屏幕并修改 UIBezierPath 时都会调用它

  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextDrawImage(context, self.bounds, image);

  [lineColor setStroke];
  [currentPath stroke];
  if(panEnded)
  {
    if(image!=nil)
    {
      CFRelease(image);
    }
    image=nil;
    image=CGBitmapContextCreateImage(context);
    panEnded=false;
  }

所以每次我创建新图像(来自“if”分支)时,它都会旋转 180 度。我究竟做错了什么?

4

3 回答 3

0

I solved the problem by rotating image in separate context each time it is taken:

- (void)drawRect:(CGRect)rect
{
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),CGImageGetHeight(image)), image);
  [lineColor setStroke];
  [currentPath stroke];
  if(panEnded)
  {
    if(image!=nil)
    {
      CFRelease(image);
    }
    image=nil;
    image=CGBitmapContextCreateImage(context);
    [self rotateCGImage];
    panEnded=false;
    currentPath=nil;
  }
}

-(void)rotateCGImage
{
  UIGraphicsBeginImageContext(CGSizeMake(CGImageGetWidth(image), CGImageGetHeight(image)));
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextDrawImage(context, CGRectMake(0 , 0, CGImageGetWidth(image), CGImageGetHeight(image)), image);


  CGContextRotateCTM (context, radians(90));
  if(image!=nil)
  {
    CFRelease(image);
  }
  image=nil;
  image=CGBitmapContextCreateImage(context);

}
于 2012-09-29T12:10:07.700 回答
0

它的坐标和方向的差异,绘制图像的最佳方法是使用 UIImage 上的方法来处理所有这些东西

UIImage *imageUI=[UIImage imageWithCGImage:image];   
[imageUI drawInRect:rect];

希望这有帮助

于 2012-09-28T11:35:50.490 回答
0

这是我的解释,当您尝试将 CGImage 绘制到上下文中时,上下文假定 CGImage 位于像素坐标中并对其进行旋转,以便生成的图像位于世界坐标中。例如,如果您在 draw 之前尝试将图像旋转 -90,然后进行 draw ,它将正常工作,因为在世界坐标中,原点位于左下角,而在像素坐标中,原点位于左上角。

于 2018-06-21T12:19:41.060 回答