2012-03-27 5 views
4

iOS에서 this (애니메이션 GIF)과 같은 픽셀 테이트 전환을 어떻게 구현합니까?iOS의 픽셀 전환

Core Animation으로 구현할 수 있습니까?

답변

2

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 인 픽셀을 얻을 수 있습니다.

그러면 UIImageUIImageView 레이어의 확대 필터를 kCAFilterNearest으로 설정합니다. 해당 이미지 뷰를 표시하면 의도적으로 픽셀 화 된 원본 버전이 제공됩니다. 그런 다음 게으르면서 화면에 이미있는 것의 절반 크기 렌더링을 계속 수행 할 수 있습니다 (라이브 뷰 처음으로 이미지보기 이후에). 또는 주 윈도우에서 렌더링하지 않도록 코드를 조정할 수 있습니다. 필요에 따라 원래 뷰 계층 구조를보고 다시 렌더링합니다 (배율을 정수로 계속 나누는 것 이외의 다른 작업을 수행하려는 경우 작동합니다).

2

전환에서 이것을 사용하는 좋은 방법에 대해서는 잘 모르겠지만 콘텐츠의 정지 이미지 (UIImage)를 캡처 할 수있는 경우 시간 애니메이션 Picelsation 필터를 사용할 수 있어야합니다. 위의 효과를냅니다.

this answer에 내 GPUImagePixellateFilter의 예를 보여줍니다. 타이머에서 fractionalWidthOfAPixel 속성을 조정하면 이러한 효과가 발생할 수 있습니다.

정지 이미지의 경우 UIImage를 GPUImagePicture로 가져 와서 Pixellation 필터를 통해 GPUImageView로 연결해야합니다. 픽셀 너비를 업데이트 할 때마다 이미지 소스에서 -processImage으로 전화를 걸어 이미지를 화면에 업데이트하고 싶을 것입니다. 초기 설정 및 이미지 업로드 후이 애니메이션은 OpenGL ES 2.0을 지원하는 모든 iOS 장치에서 60FPS로 실행되어야합니다.