2013-05-31 4 views
1

У меня возникли проблемы с получением снимок экрана, который не размыто - первый я попытался это:IOS Screen Capture размыто

Screen capture for iOS

и это не было размыто, но я думаю, что Apple, не позволит этот код через - не будет делать обзор?

поэтому я пошел с официальным решением в документации для разработчиков: похожее на это: Capturing Screen

Но когда я использую «официальный» способ, образ создает размытое

Вот код Я использую прямо из поддержки DEV документации (iOS6 и я масштабирование, но нет никакой разницы, если масштаб 0):

CGSize imageSize = [[UIScreen mainScreen] bounds].size; 

if (NULL != UIGraphicsBeginImageContextWithOptions) 
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.65); 
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(); 

return image; 
+0

Почему '0,65'? Измените его на '0'. Кроме того, ничего не найдено в первой ссылке, которая использует частный API, о каком решении вы говорили? – Mar0ux

+0

0.65, чтобы уменьшить размер изображения - это изображение отправляется в FB и Twitter, а по шкале 0 слишком велико ... – RichNasser

+0

первое, что у меня было: было CGImageRef screen = UIGetScreenImage(); UIImage * image = [UIImage imageWithCGImage: screen]; CGImageRelease (экран); – RichNasser

ответ

3

UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale) позволяет создать графический контекст точечного рисунка, который су экранов с высоким разрешением, применяя масштабный коэффициент.

Если вы укажете значение 0.0, тогда коэффициент масштабирования будет установлен на масштабный коэффициент главного экрана устройства. На экране стандартного разрешения масштабный коэффициент обычно равен 1,0. На экране с высоким разрешением коэффициент масштабирования обычно составляет 2,0.

В вашем случае указать значение 0,65

UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.65); 

Таким образом, некоторые размывание эффект возникает


Вы можете получить полную информацию об использовании масштабного коэффициента в iOS Drawing Concepts Guideочков Versus пикселей

+0

Спасибо voromax - чтобы быть ясным, если я запускаю экран привет-Res, это изображение 0.65 из 2.0? – RichNasser

+0

Я добавил ссылку на соответствующее руководство. Какой размер в пикселях вам нужен? – voromax