Как добавить два uiimageview и сохранить их в фотогалерее iphone при разработке приложений для iphone?
Я иду прямо к делу, моя проблема в том, что у меня есть контроллер uiview, который принимает 3 кнопки и представление uiimage. Теперь,
Когда я нажимаю первую кнопку, я беру изображение из фотогалереи iphone по умолчанию и помещаю в uiimageview.
Когда я нажимаю вторую кнопку, она берет другое изображение из фотогалереи и помещает на предыдущее изображение.
Теперь, когда я нажму третью кнопку, эти два изображения добавят и сделают одно изображение и сохранят в фотоальбоме.
я сделал шаг 1 и шаг 2, но как я могу сделать шаг 3??
РЕДАКТИРОВАТЬ
предположим, что на фотографии изображен мужчина без бороды (изображение 1), но я добавляю еще одно изображение бороды (изображение 2), чтобы создать изображение, на котором он будет выглядеть как мужчина с бородой (изображение 3). Я хочу сохранить изображение 3 в фотоальбоме.
Заранее благодарю за любую помощь..
2 ответа
Сам также с той же проблемой ранее я решил таким образом
попробуйте этот код категории....
.h файл:
#import <UIKit/UIKit.h>
@interface UIImage (MyImage)
+ (UIImage*)imageFromView:(UIView*)view;
+ (UIImage*)imageFromView:(UIView*)view scaledToSize:(CGSize)newSize;
+ (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize;
+ (void)beginImageContextWithSize:(CGSize)size;
+ (UIImage *)croppedImage:(UIImage *)myImage :(CGRect)bounds;
//masking the image ....
+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage;
@end
.m файл:
#import "UIImage+MyImage.h"
@implementation UIImage (MyImage)
+ (void)beginImageContextWithSize:(CGSize)size
{
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
if ([[UIScreen mainScreen] scale] == 2.0) {
UIGraphicsBeginImageContextWithOptions(size, YES, 2.0);
} else {
UIGraphicsBeginImageContext(size);
}
} else {
UIGraphicsBeginImageContext(size);
}
}
+ (void)endImageContext
{
UIGraphicsEndImageContext();
}
+ (UIImage*)imageFromView:(UIView*)view
{
[self beginImageContextWithSize:[view bounds].size];
BOOL hidden = [view isHidden];
[view setHidden:NO];
[[view layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
[self endImageContext];
[view setHidden:hidden];
return image;
}
+ (UIImage*)imageFromView:(UIView*)view scaledToSize:(CGSize)newSize
{
UIImage *image = [self imageFromView:view];
if ([view bounds].size.width != newSize.width ||
[view bounds].size.height != newSize.height) {
image = [self imageWithImage:image scaledToSize:newSize];
}
return image;
}
+ (UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
[self beginImageContextWithSize:newSize];
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
[self endImageContext];
return newImage;
}
+ (UIImage *)croppedImage:(UIImage *)myImage :(CGRect)bounds {
CGImageRef imageRef = CGImageCreateWithImageInRect(myImage.CGImage, bounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGSize asd = croppedImage.size;
return croppedImage;
}
+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
CGImageRelease(mask);
CGImageRelease(maskRef);
return [UIImage imageWithCGImage:masked];
}
@end
мой дизайн будет представлением (названным CombinedView), которое содержит два изображения, один из которых является просто исходным изображением [т.е. человек без бороды] в верхней части этого изображения, у меня есть изображение бороды...
тогда я делаю образ таким образом....
UIImage *myMaskedImage=[UIImage imageFromView:combinedView ];
для сохранения этого в альбоме используйте это...
UIImageWriteToSavedPhotosAlbum(myMaskedImage, self, nil, nil);
попробуй эту идею....
Новое обновление: эту структуру нужно поддерживать, а также theView
цвет фона как чистый цвет
+theView ---
|
->imageview1(person)
|
->imageView2(beard alone)
В кнопке TouchUpInSide Событие Написать код thid
Создать первое изображение
UIImage *myImage = [UIImage imageNamed:@"image1.png"];
сохранить первое изображение
UIImageWriteToSavedPhotosAlbum(myImage, self, nil, nil);
Создать второе изображение
myImage = [UIImage imageNamed:@"image2.png"];
Сохранить второе изображение
UIImageWriteToSavedPhotosAlbum(myImage, self, nil, nil);