Как я могу создать UIImage с нуля. В частности, я хочу создать UIImage размером 320x50. Затем я хотел бы иметь возможность рисовать многоугольники определенного цвета на этом изображении.
Создать UIImage определенного размера
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
спасибо за этот обширный ответ, однако я не уверен, что означают некоторые из этих вещей, например, обработка изображения формы диапазона... какой из них я бы использовал, чтобы просто сделать что-то вроде UIImage *newImage = [oldImage drawPolygonOnOldImage:polygon] ;
- person CodeGuy; 16.01.2012
Ты сможешь:
- Создайте
CGBitmapContext
, используя цвет/пиксель/размеры/и т. д., которые вам понадобятся. - Используйте контекст или управляйте пикселями напрямую.
- Создайте
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