답변
C4 - 트래비스 '댓글이 올바른 것, 당신의 최선의 선택은 애니메이션이 자신을 살 렌더링하는 아마. 화면 캡처를 위해 QA1703의 코드를 가져오고 UIGraphicsBeginImageContextWithOptions
에서 생성하는 컨텍스트의 크기를 조정하고 UIGraphicsGetCurrentContext
을 호출 한 직후에 코어 그래픽 현재 변환 행렬 (CTM)을 적절하게 변경해야합니다. 그래서, 나는이 쓰기로 바로 입력, 조정이 같은 결과하는 것입니다 : 규모
- (UIImage*)screenshotWithScale:(CGFloat)scale
{
// Create a graphics context with the target size
// On iOS 4 and later, use UIGraphicsBeginImageContextWithOptions to take the scale into consideration
// On iOS prior to 4, fall back to use UIGraphicsBeginImageContext
CGSize imageSize = [[UIScreen mainScreen] bounds].size;
/* YOU'VE ADDED: */
imageSize.width *= scale;
imageSize.height *= scale;
if (NULL != UIGraphicsBeginImageContextWithOptions)
/* ... then stuff as per the original, down to ... */
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextScaleCTM(context, scale, scale);
// Iterate over every window from back to front
for (UIWindow *window in [[UIApplication sharedApplication] windows])
/* etc, etc, down to... */
// Retrieve the screenshot image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGContextRestoreGState(context);
UIGraphicsEndImageContext();
return image;
}
= 1.0, 당신은 화면에 정확히 동일한 UIImage
을 다시 얻을 수 있습니다. 눈금 = 0.5이면 가로 세로 크기가 반으로, 눈금이 0.25 인 픽셀을 얻을 수 있습니다.
그러면 UIImage
을 UIImageView
레이어의 확대 필터를 kCAFilterNearest
으로 설정합니다. 해당 이미지 뷰를 표시하면 의도적으로 픽셀 화 된 원본 버전이 제공됩니다. 그런 다음 게으르면서 화면에 이미있는 것의 절반 크기 렌더링을 계속 수행 할 수 있습니다 (라이브 뷰 처음으로 이미지보기 이후에). 또는 주 윈도우에서 렌더링하지 않도록 코드를 조정할 수 있습니다. 필요에 따라 원래 뷰 계층 구조를보고 다시 렌더링합니다 (배율을 정수로 계속 나누는 것 이외의 다른 작업을 수행하려는 경우 작동합니다).
Core Image Filter Reference에 문서화 된 CIPixellate 및 CIHexagonalPixellate 필터가 있지만 현재 OSX에서는 사용할 수 없습니다. 유감스럽게도 iOS가 아닙니다.
전환에서 이것을 사용하는 좋은 방법에 대해서는 잘 모르겠지만 콘텐츠의 정지 이미지 (UIImage)를 캡처 할 수있는 경우 시간 애니메이션 Picelsation 필터를 사용할 수 있어야합니다. 위의 효과를냅니다.
this answer에 내 GPUImagePixellateFilter의 예를 보여줍니다. 타이머에서 fractionalWidthOfAPixel
속성을 조정하면 이러한 효과가 발생할 수 있습니다.
정지 이미지의 경우 UIImage를 GPUImagePicture로 가져 와서 Pixellation 필터를 통해 GPUImageView로 연결해야합니다. 픽셀 너비를 업데이트 할 때마다 이미지 소스에서 -processImage
으로 전화를 걸어 이미지를 화면에 업데이트하고 싶을 것입니다. 초기 설정 및 이미지 업로드 후이 애니메이션은 OpenGL ES 2.0을 지원하는 모든 iOS 장치에서 60FPS로 실행되어야합니다.