2011-02-06 4 views
5

몇 가지 Mac 및 iPhone 응용 프로그램에서 볼 수있는 이미지 효과를 재현하는 방법을 궁금합니다. 모두 흑백 사진에서 시작합니다. - iPhone의 UiTabbar에서 어떻게 흰색 그림이 선택되면 파란색 그라디언트가됩니다 - Mac 용 Twitter에서 우리는 여러 가지 효과 (광선, 경사, ....)를 볼 수 있습니다코어 그래픽으로 이미지 효과

이 주제에 대한 도움이 필요하십니까? :) enter image description here

EDIT : iPhone OS가 아닌 MAC OS에서 이러한 효과가 발생합니다.

답변

2

불행히도 iOS에는 이러한 아름다운 효과의 근원 인 MacOSX에서 사용할 수있는 코어 이미지 프레임 워크가 없습니다. Core Graphics 마스크 클리핑 기능을 사용하여 UITabBar 효과를 다시 만들 수 있습니다 (예 :

void CGContextClipToMask (
    CGContextRef c, 
    CGRect rect, 
    CGImageRef mask 
); 
참조). 마스킹은 이미지 알파를 기반으로하고 모든 탭 표시 줄 단추는 알파 기반이므로 (알파 기반이 아닌 이미지를 탭 표시 줄에 추가하려고하면 최종 효과가 표시됨) 이것이 가능합니다. 마지막으로 XCode 설명서 또는 here에 포함 된
GLImageProcessing
예제를 볼 수 있습니다. 여기서는 OpenGL ES 1.1을 사용하여 몇 가지 기본 이미지 처리를 수행하는 방법을 설명합니다 (이 예제에는 일부 기본 텍스처링 및 렌더링 방법이 포함되어있어 UIKit 기반 응용 프로그램에서 OpenGL보기).

1

다른 소프트웨어 (포토샵, 픽셀 메이터 등)로 이미지를 완성해도 이미지를 얻을 수 있기 때문에 이미지를 그릴 필요가 없다고 생각합니다. 왜? 단추의 내용이 변경되지 않기 때문에 크기가 조정되지 않으므로 이미지가 잘 보이고 여기에서 가장 쉬운 방법입니다.

Quartz로 그리는 법을 배우고 싶다면 Apple 개발 센터 및/또는 Xcode에 많은 문서와 샘플이 있습니다. Advanced drawing using AppKit

+0

질문은 포토샵을 사용하지 않고 코드에서 가져 오는 방법이었습니다. 그리고 아니요, 이런 종류의 효과에 대한 많은 문서가 없습니다. 튜토리얼에 관해서는 Matt Gemmell이 작성한 것이 아닙니다 (누가 코드를 생성합니까) –

+0

링크 된 튜토리얼은 Matt Gemmell이 아닌 Matt Gallagher가 작성했습니다. –

+0

죄송합니다. 이름을 수정했습니다. – nacho4d

3

체크 아웃 애플의 QuartzDemo 샘플 프로젝트 :

이 매트 갤러거에서 최근의 튜토리얼입니다. QuartzClipping 클래스는 클리핑 및 마스킹 작업 방법을 보여줍니다. 그 프로젝트를 기반으로 내가 알아 낸 것입니다.

CGContextRef context = UIGraphicsGetCurrentContext(); 

UIImage *img = [UIImage imageNamed:@"at.png"]; 
CGImageRef alphaImage = CGImageRetain(img.CGImage); 

UIImage *backgroundImg = [UIImage imageNamed:@"gradientBackground.png"]; // background image for normal state 
CGImageRef image = CGImageRetain(backgroundImg.CGImage); 


CGFloat height = self.bounds.size.height; 
CGContextTranslateCTM(context, 0.0, height); 
CGContextScaleCTM(context, 1.0, -1.0); 

CGContextSetRGBFillColor(context, 0.129, 0.129, 0.129, 1.0); 
CGContextFillRect(context, self.bounds); 

CGContextSaveGState(context); 
CGContextClipToMask(context, CGRectMake(100.0, height - 150.0, img.size.width, img.size.height), alphaImage); 
CGContextDrawImage(context, CGRectMake(100.0 - (backgroundImg.size.width-img.size.width)/2, 
             height - 150 - (backgroundImg.size.height-img.size.height)/2, 
             backgroundImg.size.width, 
             backgroundImg.size.height), image); 
CGContextRestoreGState(context); 



UIImage *backgroundImg2 = [UIImage imageNamed:@"TabBarItemSelectedBackground.png"]; // background image for selected state 
CGImageRef image2 = CGImageRetain(backgroundImg2.CGImage); 

CGContextSaveGState(context); 
CGContextClipToMask(context, CGRectMake(180.0, height - 150.0, img.size.width, img.size.height), alphaImage); 
CGContextDrawImage(context, CGRectMake(180.0 - (backgroundImg2.size.width-img.size.width)/2, 
             height - 150.0 - (backgroundImg2.size.height-img.size.height)/2, 
             backgroundImg2.size.width, 
             backgroundImg2.size.height), image2); 
CGContextRestoreGState(context); 


CGImageRelease(image); 
CGImageRelease(alphaImage); 
CGImageRelease(image2); 
관련 문제