Как сохранить то, что я нарисовал в CGContext - PullRequest
8 голосов
/ 02 апреля 2010

Я втянул в CGContext UIView.

- (void)drawRect:(CGRect)rect { 
    [self drawInContext:UIGraphicsGetCurrentContext()]  
}

Я хотел бы сохранить то, что нарисовал, в png-файле.

Есть ли простое решение?

РЕДАКТИРОВАТЬ: Основываясь на предложениях ниже - вот то, что я до сих пор ....

-(void)createImage {
    NSString* outFile = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/image.png"];
    DLog(@"creating image file at %@", outFile);
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    NSData *imageData = UIImagePNGRepresentation(image);
    [imageData writeToFile:outFile 
                atomically:NO];
}

- (void)drawRect:(CGRect)rect { 
    [self drawInContext:UIGraphicsGetCurrentContext()]; 
    [self createImage];
}

Ответы [ 4 ]

6 голосов
/ 02 апреля 2010
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:@"image.png"];
6 голосов
/ 22 февраля 2013
CGImageRef imgRef = CGBitmapContextCreateImage(context);

UIImage* img = [UIImage imageWithCGImage:imgRef];

CGImageRelease(imgRef);
1 голос
/ 02 апреля 2010

Позвоните UIGraphicsGetImageFromCurrentImageContext, чтобы получить UIImage.
Затем вызовите UIImagePNGRepresentation для получения NSData UIImage, закодированного в PNG.
Наконец, вызовите -writeToFile:…, чтобы сохранить NSData.

0 голосов
/ 10 июня 2019
let imageWidth = inputCGImage.width
let imageHeight = inputCGImage.height

let imageRect = NSRect(
    origin: .zero,
    size: CGSize(width: imageWidth, height: imageHeight)
)

context.draw(inputCGImage, in: imageRect)

let outputImageRef = context.makeImage()!

let paths = NSSearchPathForDirectoriesInDomains(.desktopDirectory, .userDomainMask, true) as [String]

let destinationURL = NSURL(fileURLWithPath: paths.first!).appendingPathComponent("output.png")!

guard let destination = CGImageDestinationCreateWithURL(destinationURL as CFURL, kUTTypePNG, 1, nil) else {
    throw HoleFillingError.CoreGraphicsError
}

CGImageDestinationAddImage(destination, outputImageRef, nil)
CGImageDestinationFinalize(destination)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...