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

座標と向きの違い、画像を描画するための最良の方法は、UIImageのメソッドを使用してそれらすべてを処理することです

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

これがお役に立てば幸いです

于 2012-09-28T11:35:50.490 に答える
0

撮影するたびに別々のコンテキストで画像を回転させることで、問題を解決しました。

- (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

これが私の説明です。CGImageをコンテキストに描画しようとすると、コンテキストはCGImageがピクセル座標にあると想定し、結果の画像がワールド座標になるように回転させます。たとえば、描画する前に画像を-90回転させてから描画しようとすると、ワールド座標では原点が左下隅にあるのに対し、ピクセル座標では原点が左上隅にあるため、正常に機能します。

于 2018-06-21T12:19:41.060 に答える