UIImage 在 UIView 上绘制时反转
UIImage is reversed when drawn on UIView
我正在使用相机选择器控制器拍摄照片并将其显示在我的应用程序中。但是我没有使用 UIImageView
来显示图片。我在 UIView
上绘制 UIImage
,得到的结果是反转图像。这是屏幕截图:
然后我点击使用照片后的结果是:
这是我的代码:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
dView=[[drawView alloc]initWithFrame:imageUIView.frame];
[dView drawImage:chosenImage];
[imageUIView addSubview:dView];
[picker dismissViewControllerAnimated:YES completion:NULL];
}
在 dView 中:
-(void)drawImage:(UIImage *) imageToDraw{
self.pic=imageToDraw;
[imageToDraw drawInRect:self.frame];
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect targetBounds = self.layer.bounds;
// fit the image, preserving its aspect ratio, into our target bounds
CGRect imageRect = AVMakeRectWithAspectRatioInsideRect(self.pic.size,
targetBounds);
// draw the image
CGContextDrawImage(context, imageRect, self.pic.CGImage);
// Save the screen to restore next time around
imageRef = CGBitmapContextCreateImage(context);
}
我尝试了 CGAffineTransformMakeRotation
和 CGContextRotateCTM
来正确显示图像,但它们旋转了图像,而不是使内容以正确的顺序显示。正如你所看到的,图像中的内容完全颠倒了。
如何在不改变外观的情况下绘制 uiimage
?
您的 drawView
class 没有正确绘制图像。试试这个:
- (void)drawImage:(UIImage *)imageToDraw {
self.pic = imageToDraw;
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
CGRect targetBounds = self.layer.bounds;
// fit the image, preserving its aspect ratio, into our target bounds
CGRect imageRect = AVMakeRectWithAspectRatioInsideRect(self.pic.size,
targetBounds);
// draw the image
[self.pic drawInRect:imageRect];
}
- 最好添加一个
UIImageView
作为 drawView
的子视图。让图像视图完成正确渲染图像所需的所有工作。
- 命名约定。 Class 名称应以大写字母开头。变量和方法名称以小写字母开头。
我正在使用相机选择器控制器拍摄照片并将其显示在我的应用程序中。但是我没有使用 UIImageView
来显示图片。我在 UIView
上绘制 UIImage
,得到的结果是反转图像。这是屏幕截图:
然后我点击使用照片后的结果是:
这是我的代码:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
dView=[[drawView alloc]initWithFrame:imageUIView.frame];
[dView drawImage:chosenImage];
[imageUIView addSubview:dView];
[picker dismissViewControllerAnimated:YES completion:NULL];
}
在 dView 中:
-(void)drawImage:(UIImage *) imageToDraw{
self.pic=imageToDraw;
[imageToDraw drawInRect:self.frame];
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect targetBounds = self.layer.bounds;
// fit the image, preserving its aspect ratio, into our target bounds
CGRect imageRect = AVMakeRectWithAspectRatioInsideRect(self.pic.size,
targetBounds);
// draw the image
CGContextDrawImage(context, imageRect, self.pic.CGImage);
// Save the screen to restore next time around
imageRef = CGBitmapContextCreateImage(context);
}
我尝试了 CGAffineTransformMakeRotation
和 CGContextRotateCTM
来正确显示图像,但它们旋转了图像,而不是使内容以正确的顺序显示。正如你所看到的,图像中的内容完全颠倒了。
如何在不改变外观的情况下绘制 uiimage
?
您的 drawView
class 没有正确绘制图像。试试这个:
- (void)drawImage:(UIImage *)imageToDraw {
self.pic = imageToDraw;
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
CGRect targetBounds = self.layer.bounds;
// fit the image, preserving its aspect ratio, into our target bounds
CGRect imageRect = AVMakeRectWithAspectRatioInsideRect(self.pic.size,
targetBounds);
// draw the image
[self.pic drawInRect:imageRect];
}
- 最好添加一个
UIImageView
作为drawView
的子视图。让图像视图完成正确渲染图像所需的所有工作。 - 命名约定。 Class 名称应以大写字母开头。变量和方法名称以小写字母开头。