【问题标题】:How to change the size of the crop rect when using UIImagePickerController使用 UIImagePickerController 时如何更改裁剪矩形的大小
【发布时间】:2010-12-27 12:42:51
【问题描述】:

在使用UIImagePickerController 时,我需要更改裁剪矩形的大小。在我的情况下,我需要用户选择 320x385 的图像,但裁剪矩形目前仅允许 320x320(启用允许编辑时)。

有什么想法吗?

【问题讨论】:

    标签: iphone objective-c cocoa-touch uikit


    【解决方案1】:

    我做过一个类似的项目。您必须使用图像控制器。在您的图像控制器上方,您必须添加另一个图像控制器(只是因为这是您的裁剪区域) aboveImageController 的未填充/空白部分是您将要使用的地方。 (所以你应该有一个 320x480 大小和 320x385 为空的图像。)

    UIImage *image=theimageView.image;  
    CGSize newSize;
    newSize.width=320;
    newSize.height=385;
    UIGraphicsBeginImageContext(newSize);
    
    //x=0 (because widhth : 320) y=0 (aboveImageController's empty part's start) 
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    CGImageRef imageRef = CGImageCreateWithImageInRect([newImage CGImage], rect);
    UIImage *img = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef);
    

    【讨论】:

      【解决方案2】:

      委托方法中的字典返回所有内容:

      NSString *const UIImagePickerControllerMediaType;
      NSString *const UIImagePickerControllerOriginalImage;
      NSString *const UIImagePickerControllerEditedImage;
      NSString *const UIImagePickerControllerCropRect;
      NSString *const UIImagePickerControllerMediaURL;
      NSString *const UIImagePickerControllerReferenceURL;
      NSString *const UIImagePickerControllerMediaMetadata;
      

      我假设,您一直在使用几乎没用的 EditedImage ...也许对于某些缩略图...无论如何,信息字典包含 CropRect 数据,您唯一需要做的就是重新计算大小和裁剪自己的 OriginalImage,例如使用: UIImage: Resize, then Crop

      我没有测试过,这只是理论 :) ...但理论上,这应该可行 :D

      【讨论】:

        【解决方案3】:

        从图像选择器获取图像并将裁剪功能作为不同的模块。所以用户可以选择他们想要裁剪的图像部分。

        【讨论】:

        • 这应该是一条评论。没有答案。
        【解决方案4】:

        你可以用这个

        UIImage *image1 = [self resizeImage:image width:320 height:385];
        
        
        -(UIImage *)resizeImage:(UIImage *)image width:(int)wdth height:(int)hght{
            int w = image.size.width;
            int h = image.size.height;
            CGImageRef imageRef = [image CGImage];
            int width, height;
            int destWidth = wdth;
            int destHeight = hght;
            if(w > h){
                width = destWidth;
                height = h*destWidth/w;
            }
            else {
                height = destHeight;
                width = w*destHeight/h;
            }
            CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
            CGContextRef bitmap;
            bitmap = CGBitmapContextCreate(NULL, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedFirst);
        
            if (image.imageOrientation == UIImageOrientationLeft) {
        
                CGContextRotateCTM (bitmap, M_PI/2);
                CGContextTranslateCTM (bitmap, 0, -height);
        
            } else if (image.imageOrientation == UIImageOrientationRight) {
        
                CGContextRotateCTM (bitmap, -M_PI/2);
                CGContextTranslateCTM (bitmap, -width, 0);
        
            }
            else if (image.imageOrientation == UIImageOrientationUp) {
        
            } else if (image.imageOrientation == UIImageOrientationDown) {
        
                CGContextTranslateCTM (bitmap, width,height);
                CGContextRotateCTM (bitmap, -M_PI);
            }
        
            CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);
            CGImageRef ref = CGBitmapContextCreateImage(bitmap);
            UIImage *result = [UIImage imageWithCGImage:ref];
            CGContextRelease(bitmap);
            CGImageRelease(ref);
        
            return result;
        
        }
        

        【讨论】:

          猜你喜欢
          • 2016-06-09
          • 2012-10-18
          • 2010-11-03
          • 2011-01-19
          • 2012-07-05
          • 1970-01-01
          • 1970-01-01
          • 2012-02-11
          • 2012-11-02
          相关资源
          最近更新 更多