合并2图像,其中一个是可移动的

时间:2010-10-05 06:22:36

标签: iphone merge uiimageview masking

我想合并两张图片,其中一张是贺卡,心形部分是透明的,另一张是一对夫妇的形象。现在我想要一对可移动的图像,以便我可以移动它们并调整它们以设置在那个心脏部分然后我想将图像的混合物保存为一个图像并将其作为附件发送到邮件中... 能否请您提供任何此类示例或解决方案的链接。

任何帮助都会非常感激。

提前致谢...

1 个答案:

答案 0 :(得分:1)

这就是我做掩蔽的方式,这对我有用。

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage1
{

    float width,height;
        width=288.0;
        height=274.0;

    CGContextRef mainViewContentContext; CGColorSpaceRef colorSpace;
    UIImage *orgImage=image; 

    CGImageRef img = [orgImage CGImage];

    colorSpace = CGColorSpaceCreateDeviceRGB();

    mainViewContentContext = CGBitmapContextCreate (NULL, width, height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast); 
    CGColorSpaceRelease(colorSpace);

    if (mainViewContentContext==NULL)
        return NULL;

    CGRect subImageRect; 
    CGImageRef tileImage;
    float xCord=0;
    float yCord=0;
    subImageRect = CGRectMake(xCord,yCord,width,height);
    tileImage = CGImageCreateWithImageInRect(img,subImageRect);
    //UIImageWriteToSavedPhotosAlbum([UIImage imageWithCGImage:tileImage],nil,nil,nil);
    CGImageRef maskImage = maskImage1.CGImage;
    CGContextClipToMask(mainViewContentContext, CGRectMake(0, 0, width, height), maskImage);
    CGContextDrawImage(mainViewContentContext, CGRectMake(0, 0, width, height), tileImage);
    //UIImageWriteToSavedPhotosAlbum([UIImage imageWithCGImage: maskImage],nil,nil,nil);
    CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(mainViewContentContext);
    CGContextRelease(mainViewContentContext); 
    UIImage *theImage = [UIImage imageWithCGImage:mainViewContentBitmapContext];
    //UIImageWriteToSavedPhotosAlbum(theImage,nil,nil,nil);
    CGImageRelease(mainViewContentBitmapContext);
    return theImage;
}

这就是我如何移动图像

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    if([timer isValid])
        [timer invalidate];

    NSSet *allTouches = [event allTouches];

    switch ([allTouches count])
    {
        case 1: {
            //The image is being panned (moved left or right)
            UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
            CGPoint centerPoint = [touch locationInView:[self view]];

            [imgView setCenter:centerPoint];

            NSLog(@"Center.x=%f Center.y=%f",centerPoint.x,centerPoint.y);


        } break;
        case 2: {
            //The image is being zoomed in or out.

            UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0];
            UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];

            //Calculate the distance between the two fingers.
            CGFloat finalDistance = [self distanceBetweenTwoPoints:[touch1 locationInView:[self view]] toPoint:[touch2 locationInView:[self view]]];
            NSLog(@"Initial=%f Final=%f",initialDistance,finalDistance);
            //Check if zoom in or zoom out.
            //Check if zoom in or zoom out.




            int width;
            int height;

            if(initialDistance < finalDistance) {
                NSLog(@"Zoom Out");

                zx=imgView.frame.origin.x-2.5;
                zy=imgView.frame.origin.y-2.5;
                width=imgView.frame.size.width+5;
                height=imgView.frame.size.height+5;

            }
            else
            {
                NSLog(@"Zoom In");



                zx=imgView.frame.origin.x+2.5;
                zy=imgView.frame.origin.y+2.5;
                               width=imgView.frame.size.width-5;
                               height=imgView.frame.size.height-5;

            }

            imgView.frame = CGRectMake(zx,zy,width,height);
            initialDistance = finalDistance;

        } break;
    }

}

快乐的编码......