핵심 이미지 경로는 가장 신뢰할 수있는 것입니다. 실제로는 그렇게 복잡하지는 않지만 아래 샘플을 게시했습니다. 이미지를 뒤집을 수 없다는 것을 알고 있으면 변환 코드를 제거 할 수 있습니다. 주의해야 할 주요 사항은 NSImage
에서 CIImage
으로의 변환이 성능면에서 비쌉니다. 가능한 경우 CIImage
을 캐시에 저장하고 각 그리기 작업 중에 다시 생성하지 않도록해야합니다.
CIImage* ciImage = [[CIImage alloc] initWithData:[yourImage TIFFRepresentation]];
if ([yourImage isFlipped])
{
CGRect cgRect = [ciImage extent];
CGAffineTransform transform;
transform = CGAffineTransformMakeTranslation(0.0,cgRect.size.height);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
ciImage = [ciImage imageByApplyingTransform:transform];
}
CIFilter* filter = [CIFilter filterWithName:@"CIColorInvert"];
[filter setDefaults];
[filter setValue:ciImage forKey:@"inputImage"];
CIImage* output = [filter valueForKey:@"outputImage"];
[output drawAtPoint:NSZeroPoint fromRect:NSRectFromCGRect([output extent]) operation:NSCompositeSourceOver fraction:1.0];
참고 : 메모리 관리 해제/유지는 연습으로 남겨 둡니다. 위의 코드는 가비지 수집을 가정합니다. 당신은 임의의 크기로 이미지를 렌더링 할 경우
, 당신은 다음 작업을 수행 할 수 있습니다 :
NSSize imageSize = NSMakeSize(1024,768); //or whatever size you want
[yourImage setSize:imageSize];
[yourImage lockFocus];
NSBitmapImageRep* bitmap = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, imageSize.width, imageSize.height)];
[yourImage unlockFocus];
CIImage* image = [CIImage imageWithData:[bitmap TIFFRepresentation]];
감사합니다, 색상 반전 문제를 해결 않습니다
나는 etutorials.org의 코드 (http://bit.ly/Y6GpLn를) 다시 게시하고 있습니다. 불행히도, 그것은 나에게 완전한 해상도를주지 못합니다. 초기 TIFFRepresentation은 그리기 원하는 크기보다 훨씬 작습니다. 어떻게하면 고해상도로 데이터를 얻을 수 있습니까? – smartgo
원하는 크기를 사용하여'NSImage'에서'NSBitmapImageRep'을 생성 한 다음 비트 맵에서'CIImage'를 생성 할 수 있습니다. http://pastie.org/798088 –
완벽하게 고마워요! – smartgo