Создать UIImage определенного размера

Как я могу создать UIImage с нуля. В частности, я хочу создать UIImage размером 320x50. Затем я хотел бы иметь возможность рисовать многоугольники определенного цвета на этом изображении.


person CodeGuy    schedule 16.01.2012    source источник
comment
Вы можете легко рисовать изображения с помощью Quartz Graphics. Если я правильно понимаю, вы просто хотите что-то нарисовать на изображении? Что ж, в Quartz Graphics вы можете просто рисовать что-то поверх этого нарисованного изображения после того, как Quartz Graphics закончит рисовать изображение. Вы, вероятно, захотите посмотреть это ;)   -  person Totumus Maximus    schedule 16.01.2012


Ответы (3)


Вот ответ для вас вышивание изображения в iphone

И, основываясь на своем опыте, могу дать вам некоторое замечание:

Пропорциональный масштаб

- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
{
 UIGraphicsBeginImageContext(CGSizeMake(image.size.width*scaleSize,image.size.height*scaleSize);
 [image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height *scaleSize)];
 UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 return scaledImage;
}

Изменить размер

- (UIImage *)reSizeImage:(UIImage *)image toSize:(CGSize)reSize
{
 UIGraphicsBeginImageContext(CGSizeMake(reSize.width, reSize.height));
 [image drawInRect:CGRectMake(0, 0, reSize.width, reSize.height)];
 UIImage *reSizeImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 return reSizeImage;
}

Обработка определенного представления

Сначала необходимо импортировать QuzrtzCore.framework

-(UIImage*)captureView:(UIView *)theView
{
 CGRect rect = theView.frame; 
 UIGraphicsBeginImageContext(rect.size); 
 CGContextRef context = UIGraphicsGetCurrentContext(); 
 [theView.layer renderInContext:context]; 
 UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
 UIGraphicsEndImageContext(); 
 return img;
}

Обработка изображения формы диапазона

CGRect captureRect = yourRect
CGRect viewRect = self.view.frame;
UIImage *viewImg;
UIImage *captureImg;

UIGraphicsBeginImageContext(viewRect.size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[self.view.layer renderInContext:context]; 
viewImg = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext();

captureImg = [UIImage imageWithCGImage:CGImageCreateWithImageInRect(viewImg.CGImage, captureRect)];

Сохранить изображение

Сохранить в приложении

NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"image.png"];
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];

Сохранить в альбоме

CGImageRef screen = UIGetScreenImage();
UIImage* image = [UIImage imageWithCGImage:screen];
CGImageRelease(screen);
UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);
person Kuo Jimmy    schedule 16.01.2012
comment
спасибо за этот обширный ответ, однако я не уверен, что означают некоторые из этих вещей, например, обработка изображения формы диапазона... какой из них я бы использовал, чтобы просто сделать что-то вроде UIImage *newImage = [oldImage drawPolygonOnOldImage:polygon] ; - person CodeGuy; 16.01.2012

Ты сможешь:

  1. Создайте CGBitmapContext, используя цвет/пиксель/размеры/и т. д., которые вам понадобятся.
  2. Используйте контекст или управляйте пикселями напрямую.
  3. Создайте UIImage, используя результат CGBitmapContextCreateImage
person justin    schedule 16.01.2012

Я оставляю здесь свой ответ, на всякий случай, это может помочь в будущем. Этот ответ действителен для iOS10+

extension UIImage {
    static func image(with size: CGSize) -> UIImage {
        UIGraphicsImageRenderer(size: size)
            .image { $0.fill(CGRect(origin: .zero, size: size)) }
    }
}

так что вы можете сделать: UIImage.image(with: CGSize(width: 320, height: 50))

Мой ответ вдохновлен этим: https://stackoverflow.com/a/48441178/2000162

person TomCobo    schedule 26.08.2020