Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.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_Iphone_Cocos2d Iphone - Fatal编程技术网

Ios 从摄影机卷导入图像并对其进行裁剪

Ios 从摄影机卷导入图像并对其进行裁剪,ios,iphone,cocos2d-iphone,Ios,Iphone,Cocos2d Iphone,我从相机滚轮加载一个图像,并将其发送到一个函数,该函数根据我创建的矩形返回原始图像的一部分。然后,我可以将其添加到场景中,而不会出现任何问题 当我想加载原始图像的另一部分时,就会出现问题。我想创建两个精灵,每个精灵都有原始图像的不同部分,就像拼图一样,但是当我发送原始图像和不同的矩形时,我会得到与第一次相同的图像,并将两个相同的图像添加到场景中 有什么好主意吗 -(void)imagePickerController:(UIImagePickerController *)picker didFi

我从相机滚轮加载一个图像,并将其发送到一个函数,该函数根据我创建的矩形返回原始图像的一部分。然后,我可以将其添加到场景中,而不会出现任何问题

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

有什么好主意吗

-(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;
}

多亏了LearnCos,你的答案才准确无误。从较大图像的不同部分创建了两个单独的纹理,然后可以分别添加它们。

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