2017-09-06 7 views
-1

ユーザが画面をクリックすると、画像がUIImageとして保存されます。また、ユーザーのタッチ座標も保存されます。タッチ時の画像の抽出部分

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let touch = touches.first 

    if let p = touch?.location(in: view) { } 
} 

今、私が持っている問題は、私はタッチから得られたXおよびYを配置し、私は最初に保存された画像から一部をトリミングしようとしています。ただし、別のセクションが切り取られます。これをどうすれば解決できますか?私も、私は同じ機能を持っている答えを掲載していますthis post that says there are issues converting touch points on to a Image.

+3

さらに詳しい情報やコードなどを提供する必要があります。今すぐあなたがしたいこととその問題は何かを理解することは難しいです。 – ColGraff

+0

画像は実際にはビューの点数と同サイズですか?そうでない場合は、2人の比率を取る必要があります。 – jcaron

+0

私は記録のために投票しませんでした。しかし、実際には、問題を説明するのに十分なコードをまだ用意していません。レイアウト、スケーリング、切り抜きの方法など、いくつかのことに関連している可能性があります。問題を再現するために、より多くの情報を提供できますか? – dfd

答えて

0

を見つけ

質問は非常に明確ではないとして、まだここで役に立つ

かもしれないビュー階層

--> ScrollView 
--> ViewBase (View might be zoomed and rotated) 
    --> TargetImageView (Rect to be cropped (Touch point here for you)) 

そして、ここでありますそれを行う方法

CGPoint locationInImageView = [self.viewBase convertPoint:self.targetImageview.center toView:self.view]; // received from touch 
locationInImageView = [self.view convertPoint:locationInImageView toView:self.imgVPhoto]; 


UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0); 

[self.imgVPhoto.layer renderInContext:UIGraphicsGetCurrentContext()]; 

UIImage *img1 = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

// Here 2 is image scale and zoomScale is what it is zoomed :) 

CGFloat width = self.targetImageview.frame.size.width * self.zoomScale/2 ; 
CGFloat height = self.targetImageview.frame.size.height * self.zoomScale/2; 

CGFloat xPos = (locationInImageView.x * 2) - width/2; 
CGFloat yPos = (locationInImageView.y * 2) - height/2; 

CGRect rect1 = CGRectMake(xPos, yPos, width, height); 

CGImageRef imageRef = CGImageCreateWithImageInRect([img1 CGImage], rect1); 

UIImage *img = [UIImage imageWithCGImage:imageRef scale:img1.scale orientation:img1.imageOrientation]; 
// Check image here 

希望iあなたに役立ちます

関連する問題