2012-10-26 6 views
0

내 프로젝트에서는 스크린의 스크린 샷을 만들고 블러를 적용하여 젖빛 유리 효과를 만들어야합니다. 내용물은 유리 밑으로 옮길 수 있으며 블러 링 된 그림이 변경되었습니다.Fast 스크린 샷 ios

I'v는 고속 처리를 위해 Accelerate.framework를 사용했으며, 또한 i, OpenGL을 사용하여 CIImage를 GLView에 직접 그렸습니다.

이제 화면의 스크린 샷을 최적화하는 방법을 찾고 있습니다. 나는 화면 하단에 일부 지역의 스크린 샷을 얻기 위해이 방법을 사용 : self.view 1-2 파단이 있지만 여러 하위 뷰가있는 경우 (또는 경우

CGSize size = CGSizeMake(rect.size.width, rect.size.height); 

    // get screenshot of self.view 
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef ctx = CGBitmapContextCreate(nil, size.width, size.height, 8, 0, colorSpaceRef, kCGImageAlphaPremultipliedFirst); 
    CGContextClearRect(ctx, rect); 
    CGColorSpaceRelease(colorSpaceRef); 
    CGContextSetInterpolationQuality(ctx, kCGInterpolationNone); 
    CGContextSetShouldAntialias(ctx, NO); 
    CGContextSetAllowsAntialiasing(ctx, NO); 
    CGContextTranslateCTM(ctx, 0.0, someView.frame.size.height); 
    CGContextScaleCTM(ctx, 1, -1); 

    //add mask 
    CGImageRef maskImage = [UIImage imageNamed:@"mask.png"].CGImage; 
    CGContextClipToMask(ctx, rect, maskImage); 

    [someView.layer renderInContext:ctx]; 

    //get screenshot image 
    CGImageRef imageRef = CGBitmapContextCreateImage(ctx); 

이 미세하고 빠른 작동 tableview), 모든 것이 느려지 기 시작합니다.

그래서 화면의 일부 rect에서 픽셀을 얻는 빠른 방법을 찾으려고합니다. 어쩌면 저수준 API를 사용했을 수도 있습니다.

+0

위의 작업 속도가 가장 중요합니까? 또는 주 스레드를 차단하지 않아 사용자 환경에 미치는 영향을 최소화 할 수 있습니까? – dtuckernet

+0

주요 목표는 디자이너의 아이디어를 유지하면서 반응이 빠른 사용자 인터페이스를 얻는 것입니다. 이제 사용자가 iPhone 4에서 테이블보기를 스크롤하면 초당 프레임 수가 20이됩니다. 60 FPS를 갈망합니다. 이러한 결과는 스크롤링보기를 사용하여 한 장의 사진을 안에 넣었지만 여러 장의 이미지가있는 표보기 또는 스크롤보기를 사용하면 서로 중첩되어 성능이 20FPS로 떨어졌습니다. – Numeral

+0

테이블 뷰에서 셀을 재사용하고 있는지 확인 했습니까? – mkral

답변

0

-snapshotViewAfterScreenUpdates: 또는 -resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets: 메서드를 UIView에서 제공하는 일부 애니메이션을 수행하는 경우이 메서드는 UIView 개체를 비트 맵 이미지로 렌더링하지 않고 반환하므로보다 효율적입니다.