2012-10-02 16 views
12

Ho un app che prende uno screenshot di un'UIImageView con il seguente codice:iOS Schermata parte dello schermo

-(IBAction) screenShot: (id) sender{ 

UIGraphicsBeginImageContext(sshot.frame.size); 
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIImageWriteToSavedPhotosAlbum(viewImage,nil, nil, nil); 


} 

Questo funziona bene, ma ho bisogno di essere in grado di posizionare dove prendo lo screenshot in fondo mi bisogno di gradare solo un terzo dello schermo (parte centrale). Ho provato ad utilizzare

UIGraphicsBeginImageContext(CGSize 150,150); 

ma hanno trovato che ogni cosa è presa da 0,0 coordinate, qualcuno ha qualche idea di come posizionare correttamente questo.

+0

Lo stesso problema si verifica anche per me, non ho trovato alcuna soluzione. –

risposta

29

Bene, lo screenshot è preso da una tela che disegni. Così, invece di disegnare il vostro livello in tutto il contesto, con un riferimento al superiore sinistro, si disegnarlo in cui si desidera prendere screenshot ....

//first we will make an UIImage from your view 
UIGraphicsBeginImageContext(self.view.bounds.size); 
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *sourceImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

//now we will position the image, X/Y away from top left corner to get the portion we want 
UIGraphicsBeginImageContext(sshot.frame.size); 
[sourceImage drawAtPoint:CGPointMake(-50, -100)]; 
UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIImageWriteToSavedPhotosAlbum(croppedImage,nil, nil, nil); 
+0

Grazie per il vostro aiuto. – yeha

+2

Che cos'è 'sshot.frame.size'? Intendevi 'self.view.frame.size'? – progrmr

+0

È la dimensione dello screenshot. È possibile modificare tale riga in 'UIGraphicsBeginImageContext (CGSizeMake (200.200)); ' per creare un'immagine screenshot 200X200 – Lefteris

14

Da this

UIGraphicsBeginImageContext(sshot.frame.size); 
CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(c, 150, 150); // <-- shift everything up to required position when drawing. 
[self.view.layer renderInContext:c]; 
UIImage* viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil); 
+0

Sì, questa è in realtà una soluzione migliore – Lefteris

+0

sembra una buona soluzione. –

7

Utilizzare questo metodo per tagliare se la u ha un'immagine con rect specfic per ritagliare:

-(UIImage *)cropImage:(UIImage *)image rect:(CGRect)cropRect 
{ 
    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect); 
    UIImage *img = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return img; 
} 

Usa come questo:

UIImage *img = [self cropImage:viewImage rect:CGRectMake(150,150,100,100)]; //example 
+0

Grazie per il vostro aiuto. – yeha

0

Se ti piace, puoi fare riferimento al codice this.

In questo esempio è possibile ottenere l'immagine coperta dal retto da qualsiasi posizione e qualsiasi scala di zoom.

Felice Coding :)

Alcuni codice di estratto di riferimento è il seguente

Funzione principale o codice utilizzato per ritagliare la foto

- (UIImage *) croppedPhoto 
{ 
    CGFloat ox = self.scrollView.contentOffset.x; 
    CGFloat oy = self.scrollView.contentOffset.y; 
    CGFloat zoomScale = self.scrollView.zoomScale; 
    CGFloat cx = (ox + self.cropRectangleButton.frame.origin.x + 15.0f) * 2.0f/zoomScale; 
    CGFloat cy = (oy + self.cropRectangleButton.frame.origin.y + 15.0f) * 2.0f/zoomScale; 
    CGFloat cw = 300.0f/zoomScale; 
    CGFloat ch = 300.0f/zoomScale; 
    CGRect cropRect = CGRectMake(cx, cy, cw, ch); 

    NSLog(@"---------- cropRect: %@", NSStringFromCGRect(cropRect)); 
    NSLog(@"--- self.photo.size: %@", NSStringFromCGSize(self.photo.size)); 

    CGImageRef imageRef = CGImageCreateWithImageInRect([self.photo CGImage], cropRect); 
    UIImage *result = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 

    NSLog(@"------- result.size: %@", NSStringFromCGSize(result.size)); 

    return result; 
} 

I dettagli su come utilizzare l'esempio è dato here .

Godere della codifica :)

Problemi correlati