【发布时间】:2015-03-20 19:35:10
【问题描述】:
我是 iOS Swift 开发的新手,但对图像处理更陌生。我在 UIScrollView 中有一个 UIImageView。我希望用户缩放/平移以显示他们想要捕获的确切图像。我有这个工作在一定程度上。当用户单击一个按钮时,它确实正确捕获了图像以及 UIScrollView 框中的内容,但是,图像的大小不正确。任何帮助将不胜感激!
@IBAction func tapSendtoBand(sender: UIButton) {
var frameInfo = frameForImage(photoImageView.image!, imageView: photoImageView)
var imageWidth = photoImageView.image!.size.height
var scale:CGFloat = CGFloat(1.0) / (photoImageView.frame.size.height / imageWidth)
var visibleRect = CGRect()
var pWidth = CGFloat(CGImageGetWidth(photoImageView.image?.CGImage))
var pHeight = CGFloat(CGImageGetHeight(photoImageView.image?.CGImage))
visibleRect.origin = scrollView.contentOffset
visibleRect.size = scrollView.bounds.size
visibleRect.origin.x *= scale
visibleRect.origin.y *= scale
visibleRect.size.width *= scale
visibleRect.size.height *= scale
var pSize:CGSize = CGSize(width: visibleRect.size.width,height: visibleRect.size.height)
let bRect = AVMakeRectWithAspectRatioInsideRect(pSize, visibleRect)
UIImageWriteToSavedPhotosAlbum(cropImage(photoImageView.image!, rect: bRect), nil, nil, nil)
photoTest.image = cropImage(photoImageView.image!, rect: bRect)
}
这是我用来确定尺寸的框架函数
func frameForImage (image:UIImage, imageView:UIImageView) -> CGRect{
var imageRatio = image.size.width / image.size.height;
var viewRatio = imageView.frame.size.width / imageView.frame.size.height;
if(imageRatio < viewRatio){
var scale = imageView.frame.size.height / image.size.height;
var width = scale * image.size.width;
var topLeftX = (imageView.frame.size.width - width) * 0.5;
return CGRectMake(topLeftX, 0, width, imageView.frame.size.height)
}
else{
var scale = imageView.frame.size.width / image.size.width;
var height = scale * image.size.height;
var topLeftY = (imageView.frame.size.height - height) * 0.5;
return CGRectMake(0, topLeftY, imageView.frame.size.width, height);
}
}
这是我用来实际裁剪图像的函数
func cropImage(srcImage:UIImage,rect:CGRect) -> UIImage
{
var cgImageConv = srcImage.CGImage
var cgSizeConv:CGSize = CGSize(width: 310,height: 102)
var cr:CGImageRef = CGImageCreateWithImageInRect(cgImageConv, rect)
var cropped:UIImage = UIImage(CGImage: cr)!
return cropped
}
【问题讨论】:
-
怎么了?那么拍摄的图像实际上是原始图像的正确部分但分辨率错误?长宽比对还是错?图片大小只有两倍还是一半?
标签: ios iphone swift uiscrollview uiimageview