2010-08-06 4 views
0

NSTextField에서 CGImage를 만들려고합니다.
나는 이것에서 약간의 성공을 얻었다. 여전히 텍스트만으로 이루어진 CGImage는 얻을 수 없다. http://www.cocoadev.com/index.pl?ConvertNSImageToCGImageNSView에서 CGImage 가져 오기


NSBitmapImageRep * bm = [NSBitmapImageRep alloc]; 
[theView lockFocus]; 
[bitmap initWithFocusedViewRect:[theView bounds]]; 
[theView unlockFocus] 

[bma retain];// data provider will release this 
int  rowBytes, width, height; 

rowBytes = [bm bytesPerRow]; 
width = [bm pixelsWide]; 
height = [bm pixelsHigh]; 

CGDataProviderRef provider = CGDataProviderCreateWithData(bm, [bm bitmapData], rowBytes * height, BitmapReleaseCallback); 
CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); 
CGBitmapInfo bitsInfo = kCGImageAlphaPremultipliedLast; 

CGImageRef img = CGImageCreate(width, height, 8, 32, rowBytes, colorspace, bitsInfo, provider, NULL, NO, kCGRenderingIntentDefault); 

CGDataProviderRelease(provider); 
CGColorSpaceRelease(colorspace); 

return img; 


에서

나는 조각 다음 시도 내가 그 말을 의미, 텍스트 필드 나는 그와 함께 배경 화면의 색상을 얻고있다. 촬영 때마다 (나는 알파 채널 정보를 얻고 있지 않다 같은데)

배경색없이 CGImage를 얻으려면 어떤 도움이 필요합니까?

답변

1

-initWithFocusedViewRect:은 윈도우 백업 저장소에서 읽습니다. 따라서 본질적으로 윈도우의 해당 부분의 스크린 샷입니다. 이것이 이미지에서 창 배경색을 얻는 이유입니다.

-[NSView cacheDisplayInRect:toBitmapImageRep:]은 매우 유사하지만 뷰 및 뷰의 하위보기는 있지만 슈퍼 뷰는 표시하지 않습니다. 텍스트 필드에 경계선이 없으면이 방법으로 충분할 수 있습니다. NSBitmapImageRep을 만들려면 -bitmapImageRepForCachingDisplayInRect:을 사용해야합니다!

위보다 정확할 수있는 옵션이 하나 더 있습니다. NSTextField는 NSTextFieldCell을 사용하여 내용을 그립니다. 적절한 크기의 이미지를 만든 다음 초점을 잠그고 -drawInteriorWithFrame:inView:을 호출하는 것에서 막을 수있는 방법은 없습니다. 텍스트 필드에 그려진 것과 똑같이 텍스트를 그려야합니다.

마지막으로 텍스트를 그리는 경우 NSStringDrawing을 잊지 마세요. NSString에는 속성 (drawAtPoint:withAttributes:)으로 그릴 몇 가지 메소드가 있고 NSAttributedString에는 그리기 메소드 (drawAtPoint:)도 있습니다. NSTextFieldCell에 대신 그려달라고 요청하는 대신 그 중 하나를 사용할 수 있습니다.

+0

사실 저는 CGImage에서 텍스처를 생성하려고합니다. 어쨌든 당신의 돈을 주셔서 감사합니다, 나는 곧 돌아올 것입니다. – shakthi

+0

괜찮습니다. 위의 모든 메소드는 CGImage를 생성 할 수있는 NSImage 또는 NSBitmapImageRep을 생성합니다. – kperryua

+0

잘 작동합니다. 고마워요. – shakthi