http://forum.i-ekb.ru/index.php?showtopic=1716
URL на удаленное изображение
Поместим на наш UIView
Закругляем изображения
Добавляем
Как сделать анимацию из картинок
GIF грузить не получится стандартными средствами SDK, так что если речь идет не о анимации в OpenGL, то делайте так:
1. создаете UIImageView
2. грузите серию изображений вашей анимации как массив UIImage объектов
3. проставляете массив изображений для свойства animationImages в UIImageView
4. устанавливаете продолжительность анимации в свойстве animationDuration
5. startAnimating для UIImageView
Как отправить емейл с вложениями, используя камеру и фотоальбом
Запуск камеры iPhone
Как анимированно вращать изображение
Радианы и градусы
Переводим из градусов в радианы
Как анимированно передвинуть изображение
Передвижение изображения
Как сохранить UIImage в PNG или JPG
Как сделать снимок с камеры и сохранить в фотоальбом
Запускаем камеру
Как изменить размер изображения
Как разбить большое изображение на куски равного размера
Иногда бывает удобно изображение одинакового размера затолкать в одно большое изображение, чтобы не разводить кучу файлов, для разбивки используем код:
Как обрезать картинку
Как сделать изображение черно-белым
Как сделать снимок экрана
Настраиваем пользовательский интерфейс
Работа с изображениями
Как скачать, создать и показать изображение через URL
URL на удаленное изображение
NSURL *url = [NSURL URLWithString: @"http://darknessproduction.ru/ifullstat.png"];Создание UIImage из NSData
UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];
Поместим на наш UIView
NSURL *url = [NSURL URLWithString:
@"http://darknessproduction.ru/ifullstat.png"];
UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];
[self.view addSubview:[[[UIImageView alloc] initWithImage:image] autorelease]];
Закругляем изображения
Добавляем
#include <QuartzCore/QuartzCore.h>в viewDidLoad нашего контроллера прописываем:
CALayer * ourLayer = [imageView layer]; // Будем округлять UIImageViewНу и собственно всё. Очевидно, что если хотим получить овальный View, указываем cornerRadius равный половине длины короткой стороны нашего View.
ourLayer.cornerRadius = 8.0f; // Задаем радиус для округления.
ourLayer.masksToBounds = YES; // Чтобы за овальной границей в углах ничего не рисовалось
ourLayer.borderWidth = 0.0f; // Границу рисовать не будем. Если нужна - указываем толщину
Как сделать анимацию из картинок
GIF грузить не получится стандартными средствами SDK, так что если речь идет не о анимации в OpenGL, то делайте так:
1. создаете UIImageView
2. грузите серию изображений вашей анимации как массив UIImage объектов
3. проставляете массив изображений для свойства animationImages в UIImageView
4. устанавливаете продолжительность анимации в свойстве animationDuration
5. startAnimating для UIImageView
NSArrray *theImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"image_1.png"],
[UIImage imageNamed:@"image_2.png"],
[UIImage imageNamed:@"image_3.png"],
[UIImage imageNamed:@"image_4.png"],
[UIImage imageNamed:@"image_5.png"], nil];
UIImageView *anImageView = ... //мембер класса, или создаете по месту, не важно
anImageView.animationImages = theImages;
anImageView.animationDuration = 1.0; // 1 секунда
[anImageView startAnimating];
Как отправить емейл с вложениями, используя камеру и фотоальбом
Запуск камеры iPhone
- (void)buttonPressed:(UIButton *)buttonКонвертируем изображение с камеры в NSData
{
// Создание image picker controller
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
// Устанавливаем сорс для камеры
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
// Текущий Delegate
imagePicker.delegate = self;
// Вырубаем редактирование изображений
imagePicker.allowsImageEditing = NO;
// Показываем image picker
[self presentModalViewController:imagePicker animated:YES];
}
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)infoОтправка изображения с камеры
{
// Берем изображение из информации словаря
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
// Закрываем окно камеры
[self dismissModalViewControllerAnimated:YES];
// Запускаем функцию отправки изображения по почте
[self performSelector:@selector(emailImage:) withObject:image afterDelay:1.0];
// Релизим picker
[picker release];
}
- (void)emailImage:(UIImage *)image
{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
// Устанавливаем тему письма
[picker setSubject:@"Picture from my iPhone!"];
// Добавляем адреса почты, куда будем отсылать
[picker setToRecipients:[NSArray arrayWithObjects:@"(Гости не видят ссылок. )", @"(Гости не видят ссылок. )", nil]];
[picker setCcRecipients:[NSArray arrayWithObject:@"(Гости не видят ссылок. )"]];
[picker setBccRecipients:[NSArray arrayWithObject:@"(Гости не видят ссылок. )"]];
// Устанавливаем тело сообщения
NSString *emailBody = @"I just took this picture, check it out.";
// Вырубаем XTML формат
[picker setMessageBody:emailBody isHTML:NO];
// Создаем NSData из PNG изображения с камеры
NSData *data = UIImagePNGRepresentation(image);
// Добавляем изображение к письму как вложение
[picker addAttachmentData:data mimeType:@"image/png" fileName:@"CameraImage"];
// Показываем окно отправки письма
[self presentModalViewController:picker animated:YES];
// Релизим picker
[picker release];
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
// Закрываем окно отправки письма
[self dismissModalViewControllerAnimated:YES];
}
Как анимированно вращать изображение
Радианы и градусы
Переводим из градусов в радианы
// This is defined in Math.hВращаем изображение
#define M_PI 3.14159265358979323846264338327950288 /* pi */
#define DEGREES_TO_RADIANS(angle) ((angle / 180.0) * M_PI)
- (void)rotateImage:(UIImageView *)image duration:(NSTimeInterval)durationВызов вращения
curve:(int)curve degrees:(CGFloat)degrees
{
// Устанавливаем анимацию
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve:curve];
[UIView setAnimationBeginsFromCurrentState:YES];
CGAffineTransform transform =
CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(degrees));
image.transform = transform;
[UIView commitAnimations];
}
- (void)startApp
{
UIImageView *imageToMove =
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ArrowUp.png"]];
imageToMove.frame = CGRectMake(10, 10, 20, 100);
[self.view addSubview:imageToMove];
[self rotateImage:imageToMove duration:3.0
curve:UIViewAnimationCurveEaseIn degrees:180];
}
Как анимированно передвинуть изображение
Передвижение изображения
- (void)moveImage:(UIImageView *)image duration:(NSTimeInterval)durationВызов передвижения
curve:(int)curve x:(CGFloat)x y:(CGFloat)y
{
// Устанавливаем анимацию
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve:curve];
[UIView setAnimationBeginsFromCurrentState:YES];
// The transform matrix
CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
image.transform = transform;
[UIView commitAnimations];
}
- (void)startApp
{
UIImageView *imageToMove =
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Square.png"]];
imageToMove.frame = CGRectMake(10, 10, 20, 100);
[self.view addSubview:imageToMove];
[self moveImage:imageToMove duration:3.0
curve:UIViewAnimationCurveLinear x:50.0 y:50.0];
}
Как сохранить UIImage в PNG или JPG
//Создадим пути для выходных форматов
NSString *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.png"];
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.jpg"];
// Запишем UIImage в JPEG с минимальным сжатием (наилучшее качество)
[UIImageJPEGRepresentation(image, 1.0) writeToFile:jpgPath atomically:YES];
// Запишем UIImage в PNG
[UIImagePNGRepresentation(image) writeToFile:pngPath atomically:YES];
// Проверим как хорошо у нас записалось:
// Создаем файл-менеджер
NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];
// Устанавливаем директорию Документов
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
// Проверяем список файлов, который содержит директория Документов
NSLog(@"Директория Документов: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);
Как сделать снимок с камеры и сохранить в фотоальбом
Запускаем камеру
// Создаем image picker controllerСохранение изображения в Фотоальбом
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
// Устанавливаем сорс камеры
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
// Текущий Delegate
imagePicker.delegate = self;
// Выключаем редактирование изображения
imagePicker.allowsImageEditing = NO;
// Покажем image picker
[self presentModalViewController:imagePicker animated:YES];
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
// Сохраняем изображение
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
[picker release];
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
UIAlertView *alert;
// Проверяем доступность сохранения изображения
if (error)
alert = [[UIAlertView alloc] initWithTitle:@"Ошибка"
message:@"Невозможно сохранить изображения."
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
else // все хорошо
alert = [[UIAlertView alloc] initWithTitle:@"Успех"
message:@"Изображение сохранено."
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
[alert release];
}
Как изменить размер изображения
UIImage *UImageFromPathScaledToSize(NSString* path, CGSize toSize)
{
UIImage *scaledImg = nil;
UIImage *img = [[UIImage alloc] initWithContentsOfFile:path]; // get the image
if( img )
{
float scale = GetScaleForProportionalResize( img.size, toSize, false, false );
CGImageRef cgImage = CreateCGImageFromUIImageScaled( img, scale );
[img release];
if( cgImage )
{
scaledImg = [UIImage imageWithCGImage:cgImage]; // autoreleased
CGImageRelease( cgImage );
}
}
return scaledImg;
}
Как разбить большое изображение на куски равного размера
Иногда бывает удобно изображение одинакового размера затолкать в одно большое изображение, чтобы не разводить кучу файлов, для разбивки используем код:
@interface UIImage (Utilities)Использование:
- (NSMutableArray*) getTilesWithSize:(CGSize)tileSize;
@end
//------------------------------------------------------------------------
@implementation UIImage (Utilities)
- (NSMutableArray*) getTilesWithSize:(CGSize)tileSize
{
NSUInteger countW = self.size.width / tileSize.width;
NSUInteger countH = self.size.height / tileSize.height;
NSMutableArray* array = [NSMutableArray arrayWithCapacity:(countW * countH)];
CGRect rect = CGRectMake(0, 0, tileSize.width, tileSize.height);
NSUInteger w;
NSUInteger h;
for (h = 0, rect.origin.y = 0; h < countH; h++, rect.origin.y += tileSize.height)
{
for (w = 0, rect.origin.x = 0; w < countW; w++, rect.origin.x += tileSize.width)
{
CGImageRef tileImageRef = CGImageCreateWithImageInRect(self.CGImage, rect);
[array addObject:[UIImage imageWithCGImage:tileImageRef]];
CGImageRelease(tileImageRef);
}
}
return array;
}
@end
UIImage* image;
NSMutableArray* normalImages;
NSMutableArray* highlightedImages;
image = [UIImage imageNamed:@"ImagesSet_Buttons_Normal.png"];
normalImages = [image getTilesWithSize:CGSizeMake(66, 66)];
image = [UIImage imageNamed:@"ImagesSet_Buttons_Highlighted.png"];
normalImages = [image getTilesWithSize:CGSizeMake(66, 66)];
Как обрезать картинку
// Создаем UIImage из существующего PNG-файла
UIImage *image = [UIImage imageNamed:@"prgBinary.jpg"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
// Берем размер текущего изображения
CGSize size = [image size];
// Делаем imageView по размеру изображения и добавляем в наше представление
[imageView setFrame:CGRectMake(0, 0, size.width, size.height)];
[[self view] addSubview:imageView];
[imageView release];
// Создаем прямоугольную область, которую надо обрезать
CGRect rect = CGRectMake(size.width / 4, size.height / 4 ,
(size.width / 2), (size.height / 2));
// Создаем bitmap изображения
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rect);
UIImage *img = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
// Создаем и показываем изображение из bitmap
imageView = [[UIImageView alloc] initWithImage:img];
[imageView setFrame:CGRectMake(0, 200, (size.width / 2), (size.height / 2))];
[[self view] addSubview:imageView];
[imageView release];
Как сделать изображение черно-белым
- (UIImage *)convertImageToGrayScale:(UIImage *)image
{
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
// Выбираем Черно-белую палитру
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
// Создаем bitmap и контекст
CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaNone);
CGContextDrawImage(context, imageRect, [image CGImage]);
CGImageRef imageRef = CGBitmapContextCreateImage(context);
// Создаем UIImage
UIImage *newImage = [UIImage imageWithCGImage:imageRef];
// Релизим палитру, битмап и контекст
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
CFRelease(imageRef);
// Возвращаем уже черно-белое изображение
return newImage;
}
Как сделать снимок экрана
Настраиваем пользовательский интерфейс
- (id)initВызов UIGetScreenImage()
{
if (self = [super init])
{
self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
self.view.backgroundColor = [UIColor grayColor];
// Кнопка активации камеры
button = [[UIButton alloc] initWithFrame:CGRectMake(80, 55, 162, 53)];
[button setBackgroundImage:[UIImage imageNamed:@"Camera.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents: UIControlEventTouchUpInside];
[self.view addSubview:button];
[button release];
}
return self;
}
CGImageRef UIGetScreenImage(void);Сохранение скрина экрана в фотоальбом
- (void)buttonPressed:(UIButton *)button
{
// Создаем скрин экрана и добавляем его в UIImage
CGImageRef screen = UIGetScreenImage();
UIImage* image = [UIImage imageWithCGImage:screen];
CGImageRelease(screen);
// Сохраняем UIImage в фотоальбом
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
UIAlertView *alert;
// Проверяем возможность сохранения
if (error)
alert = [[UIAlertView alloc] initWithTitle:@"Ошибка"
message:@"Невозможно сохранить."
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
else // Все хорошо
alert = [[UIAlertView alloc] initWithTitle:@"Успех"
message:@"Изображение сохранено."
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
[alert release];
}
No comments:
Post a Comment