从相机胶卷导入图像并裁剪

Posted

技术标签:

【中文标题】从相机胶卷导入图像并裁剪【英文标题】:Importing an image from camera roll and cropping it 【发布时间】:2014-03-05 08:38:15 【问题描述】:

我从相机胶卷加载图像并将其发送到一个函数,该函数根据我创建的矩形返回原始图像的一部分。然后我可以毫无问题地将它添加到场景中。

当我想加载原始图像的另一部分时会出现问题。我想创建 2 个精灵,每个精灵都有原始图像的不同部分,就像拼图一样,但是当我发送原始图像和不同的矩形时,我得到与第一次相同的图像并将两个相同的图像添加到场景。

任何想法将不胜感激?

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

    // newImage is a UIImage do not try to use a UIImageView
    UIImage *newImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    UIImage *newImage2 = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    //newImage2 = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    // Dismiss UIImagePickerController and release it
    [picker dismissModalViewControllerAnimated:YES];
    [picker.view removeFromSuperview];
    [picker    release];

    CGRect newRect = CGRectMake(0, 0, 320, 460);
    CGRect newRect2 = CGRectMake(600, 600, 100, 100);

    UIImage *testImage = [self imageFromImage:newImage inRect:newRect];
    UIImage *testImage2 = [self imageFromImage:newImage2 inRect:newRect2];

    CCSprite *scaledImage = [CCSprite spriteWithCGImage:testImage.CGImage key:@"ImageFromPicker"];
    scaledImage.position = ccp(s.width/2, s.height/2);
    [self addChild:scaledImage];

    CCSprite *scaledImage2 = [CCSprite spriteWithFile:@"play.png"];//[CCSprite spriteWithCGImage:testImage2.CGImage key:@"ImageFromPicker"];
    scaledImage2.position = ccp(560,40);
    [self addChild:scaledImage2];

以及裁剪图像的方法:

- (UIImage *)imageFromImage:(UIImage *)image inRect:(CGRect)rect

    CGImageRef sourceImageRef = [image CGImage];
    CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, rect);
    UIImage *tempImage = [UIImage imageWithCGImage:newImageRef];
    return tempImage;

【问题讨论】:

您确定图像 > 600x600 点?替代方案:从 UIImage 创建一个 CCTexture2D。然后你可以从纹理和矩形创建精灵。您不需要使用 CG 函数来实现您想要实现的目标。 原图是大全景图,整张图太大无法导入,只加载部分图片。我还能用 CCTexture2D 做到这一点吗? 如果您首先将其裁剪为最多 4096x4096 或 2048x2048,具体取决于您要支持的设备。所以用CG裁剪到纹理大小限制,然后创建一个CCTexture2D,这样就可以了。 感谢您的信息,这似乎是要走的路。对此还有一个问题。假设图像是 4096x8000,我可以将前半部分作为纹理加载,然后将后半部分作为纹理加载,这样我就可以访问所有图像,或者有更简单的方法吗? 如果你从图像创建两个单独的纹理应该是可能的 【参考方案1】:

感谢 LearnCocos,您的回答很到位。从较大图像的不同部分创建 2 个单独的纹理,然后可以分别添加它们。

【讨论】:

以上是关于从相机胶卷导入图像并裁剪的主要内容,如果未能解决你的问题,请参考以下文章

从相机裁剪图像并保存

从相机捕获图像并裁剪不工作

刚从相机拍摄并通过从图库中挑选显示的Android裁剪图像

UIImagePickerController 中的自定义裁剪大小

从 iOS SDK 中的相机点击后手动裁剪 UIImage

如何从相机中裁剪图像