Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS图像缩放和裁剪,放大实际上会使图像变小吗?_Ios_Uiimageview_Uigesturerecognizer_Scale_Uigraphicscontext - Fatal编程技术网

IOS图像缩放和裁剪,放大实际上会使图像变小吗?

IOS图像缩放和裁剪,放大实际上会使图像变小吗?,ios,uiimageview,uigesturerecognizer,scale,uigraphicscontext,Ios,Uiimageview,Uigesturerecognizer,Scale,Uigraphicscontext,我使用别人的收缩手势代码进行缩放,效果很好,但它在我的照片编辑应用程序中缩放我的图像,一旦用户按下“完成缩放”,我需要反映和保存更改,或者用另一种方式说,如果有人使用收缩进行缩放,我需要实际放大和剪切图像。我想我可以使用他们缩放的数量*uigraphicsbeginimagecontext的帧大小,但这种策略不起作用,因为当用户缩放图像并点击“完成”按钮时,图像会保存得更小,因为现在这个非常大的尺寸会被挤压到视图中,而我真正想要的是裁剪掉任何剩余部分,而不做任何操作合身 - (IBAction)

我使用别人的收缩手势代码进行缩放,效果很好,但它在我的照片编辑应用程序中缩放我的图像,一旦用户按下“完成缩放”,我需要反映和保存更改,或者用另一种方式说,如果有人使用收缩进行缩放,我需要实际放大和剪切图像。我想我可以使用他们缩放的数量*uigraphicsbeginimagecontext的帧大小,但这种策略不起作用,因为当用户缩放图像并点击“完成”按钮时,图像会保存得更小,因为现在这个非常大的尺寸会被挤压到视图中,而我真正想要的是裁剪掉任何剩余部分,而不做任何操作合身

- (IBAction)pinchGest:(UIPinchGestureRecognizer *)sender{


if (sender.state == UIGestureRecognizerStateEnded
    || sender.state == UIGestureRecognizerStateChanged) {
    NSLog(@"sender.scale = %f", sender.scale);

    CGFloat currentScale = self.activeImageView.frame.size.width / self.activeImageView.bounds.size.width;
    CGFloat newScale = currentScale * sender.scale;

    if (newScale < .5) {
        newScale = .5;
    }
    if (newScale > 4) {
        newScale = 4;
    }

    CGAffineTransform transform = CGAffineTransformMakeScale(newScale, newScale);
    self.activeImageView.transform = transform;
    scalersOfficialChange = newScale;
    sender.scale = 1;

}
}

- (IBAction)doneMoverViewButtonPressed:(UIButton *)sender {
// turn off ability to move & scale
moverViewActive = NO;

NSLog(@"%f %f",dragOfficialChange.x,dragOfficialChange.y);
NSLog(@"%f",rotationOfficialChange);
NSLog(@"%f",scalersOfficialChange);


//problem area below...
CGSize newSize = CGSizeMake(self.activeImageView.bounds.size.width * scalersOfficialChange, self.activeImageView.bounds.size.height * scalersOfficialChange );

UIGraphicsBeginImageContext(newSize);

[self.activeImageView.image drawInRect:CGRectMake(dragOfficialChange.x, dragOfficialChange.y, self.layerContainerView.bounds.size.width, self.layerContainerView.bounds.size.height)];

self.activeImageView.image = UIGraphicsGetImageFromCurrentImageContext();


UIGraphicsEndImageContext();

[self hideMoveViewerAnimation];

//resets activeimageview coords
CGRect myFrame = self.layerContainerView.bounds;
myFrame.origin.x = 0;
myFrame.origin.y = 0;
self.activeImageView.frame = myFrame;

//reset changes values
dragOfficialChange.x = 0;
dragOfficialChange.y = 0;
rotationOfficialChange = 0;
scalersOfficialChange = 0;

}
-(iAction)PinchGet:(UIPinchGetSureRecognitor*)发送方{
如果(sender.state==UIgestureRecognitizerStateEnded
||sender.state==UIGestureRecognitzerStateChanged){
NSLog(@“sender.scale=%f”,sender.scale);
CGFloat currentScale=self.activeImageView.frame.size.width/self.activeImageView.bounds.size.width;
CGFloat newScale=currentScale*sender.scale;
if(新闻级<.5){
新标度=.5;
}
如果(新闻级别>4){
新标度=4;
}
CGAffineTransform transform=CGAffineTransformMakeScale(newScale,newScale);
self.activeImageView.transform=转换;
ScalerOfficialChange=新闻缩放;
sender.scale=1;
}
}
-(iAction)完成查看按钮按下:(UIButton*)发送者{
//关闭移动和缩放功能
moverViewActive=否;
NSLog(@“%f%f”,dragOfficialChange.x,dragOfficialChange.y);
NSLog(@“%f”,轮换官方变更);
NSLog(@“%f”,ScalerOfficialChange);
//下面的问题区域。。。
CGSize newSize=CGSizeMake(self.activeImageView.bounds.size.width*scalerofficialchange,self.activeImageView.bounds.size.height*scalerofficialchange);
UIGraphicsBeginImageContext(新闻大小);
[self.activeImageView.image drawInRect:CGRectMake(dragOfficialChange.x,dragOfficialChange.y,self.layerContainerView.bounds.size.width,self.layerContainerView.bounds.size.height)];
self.activeImageView.image=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsSendImageContext();
[自隐藏视图激活];
//重置activeimageview坐标
CGRect myFrame=self.layerContainerView.bounds;
myFrame.origin.x=0;
myFrame.origin.y=0;
self.activeImageView.frame=myFrame;
//重置更改值
dragOfficialChange.x=0;
dragOfficialChange.y=0;
旋转系数变化=0;
ScalerOfficialChange=0;
}

首先,你能把你的问题说清楚一点吗?我建议你想把你的图像画成一个矩形,但不想挤压它,对吗

然后,让我们尝试以下方法:

//The method: drawInRect:(CGRect) will scale your pic and squeeze it to fit the Rect area
//So if you dont want to scale your pic, you can use the method below
[image drawAsPatternInRect:(CGRect)_rect];
//This method would not scale your image and cut the needless part

这让我朝着正确的方向前进,所以感谢你,我可能需要重写捏感。问题是试图将捏感动作中的变换转换为与之完全匹配的最终绘图。我真的不知道转换在做什么,但我假设调整图像视图的大小,我认为这可以作为预览,但正如我所说,我在将其转换为最终图像并在转换后重置图像视图时遇到困难。再次感谢。