2012-03-16 62 views
1

我在截取特定區域時遇到問題。 我在底部有一個tabbar,頂部有一個工具欄。我想截取這兩個欄之間的屏幕截圖。以下是我的代碼。我怎樣才能改善我的代碼來裁剪酒吧?在應用截圖中調整大小

感謝

CGSize imageSize = [[UIScreen mainScreen] bounds].size; 
if (NULL != UIGraphicsBeginImageContextWithOptions) 
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0); 
else 
    UIGraphicsBeginImageContext(imageSize); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

// Iterate over every window from back to front 
for (UIWindow *window in [[UIApplication sharedApplication] windows]) 
{ 
    if (![window respondsToSelector:@selector(screen)] || [window screen] == [UIScreen mainScreen]) 
    { 
     // -renderInContext: renders in the coordinate space of the layer, 
     // so we must first apply the layer's geometry to the graphics context 
     CGContextSaveGState(context); 
     // Center the context around the window's anchor point 
     CGContextTranslateCTM(context, [window center].x, [window center].y); 
     // Apply the window's transform about the anchor point 
     CGContextConcatCTM(context, [window transform]); 
     // Offset by the portion of the bounds left of and above the anchor point 
     CGContextTranslateCTM(context, 
           -[window bounds].size.width * [[window layer] anchorPoint].x, 
           -[window bounds].size.height * [[window layer] anchorPoint].y); 

     // Render the layer hierarchy to the current context 
     [[window layer] renderInContext:context]; 

     // Restore the context 
     CGContextRestoreGState(context); 
    } 
} 

// Retrieve the screenshot image 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 




UIImageWriteToSavedPhotosAlbum(image, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil); 
+0

檢查這個post..http://stackoverflow.com/questions/9694806/how-to-take-a-screenshot-of-a-part-of-an-apps-window/9696309#9696309 – 2012-03-16 06:45:43

回答

3

我想你可以嘗試地修剪掉你創建最終的UIImage後需要的部分。

CGRect contentRectToCrop = CGRectMake(0, 44, 320, 392); 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 

CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], contentRectToCrop); 
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
+0

謝謝,聽起來不錯,但我可以在哪裏放置此代碼?我試圖在保存方法之前插入,但似乎不起作用。 – Clarence 2012-03-16 08:44:19

+0

嘗試替換單行UIImage * image = UIGraphicsGetImageFromCurrentImageContext();在你的代碼中使用此塊,並確保將'croppedImage'而不是'image'傳遞給UIImageWriteToSavedPhotosAlbum方法。 – Madhu 2012-03-16 09:01:32

+0

問題解決....感謝 – Clarence 2012-03-16 09:06:38

0

未經測試sugestion:

imageSize.origin.y+=44; //toolbar size 
imageSize.size.height-=88; //tabbar+toolbar size