2009-07-26 6 views
2

저는 Mac OS X 용 래스터 그래픽 프레임 워크를 찾고 있습니다. 특히 픽셀 행렬처럼 (적어도 개념적으로) 조작 할 수있는 뷰를 원합니다. 내 프로그램은 프로그래밍 방식으로 픽셀 데이터를 생성합니다.Mac OS X 용 비경제 래스터 그래픽 프레임 워크가 있습니까?

QuickDraw는 설명에 적합하지만 더 이상 사용되지 않습니다. 내가 알 수있는 한, Core Graphics에는 아무 것도 없습니다. 내가 놓친 게 있니?

단순한 C 프레임 워크는 Objective-C보다 바람직하지만 너무 까다 롭지는 않습니다.

답변

4

QD는 완벽하게 합성 된 UI 및 GPU HW의 현재 세대에서 효율적으로 구현할 방법이 없으므로 더 이상 사용되지 않습니다. 그런 이유로 QD가 시스템에 상당히 유사하지는 않을 것입니다. 배킹 스토어에 직접 액세스하는 것은 GPU와의 많은 버스 트랜잭션을 가장 많이 야기하며, 최악의 경우 카드 자체에 텍스처가로드되는 것을 방지 할 수 있으며 경우에 따라 소프트웨어 폴백을 유발할 수 있습니다.

사람들이 백킹 스토어에 대한 픽셀 단위 액세스가 필요한 이유가 분명하기 때문에이를 수행 할 수있는 메커니즘이 있지만 실제 편의 방법이 없으며이를 피할 수있는 방법을 찾을 수 있다면 분명해야합니다. 이 문제를 피할 수없는 경우 CoreGraphics를 사용하여 보조 저장소에 대한 액세스 권한이 있고 보조 저장소를 직접 조작 할 수있는 CGBitmapContextCreate을 사용하여 비트 맵 컨텍스트를 만들 수 있습니다. 함께 일하기가 쉽지 않으며 느립니다.

+0

자세한 설명을 가져 주셔서 감사합니다. 당신이 천천히 말할 때, 우리는 여기서 얼마나 천천히 이야기하고 있습니까? 예를 들어 위에서 제안한 것처럼 픽셀 당 하나의 사각형을 그리는 것보다 속도가 느릴까요? (어리석은 질문이지만 의심의 여지가 없지만 그래픽 프로그래밍은 실제로 나의 장점이 아니다.) – sarnesjo

+0

정확히 무엇을하고 있느냐에 따라 픽셀 당 rect을하는 것보다 빠를 것이다. 조금 더 생각해 보면 OpenGL 표면으로 설정하고 비슷한 것을 할 수 있습니다. 이렇게하면 더 잘 제어 할 수 있고 픽셀을 읽지 않는 한 괜찮은 성능을 위해 텍스처를 매핑 할 수 있습니다. 단지 픽셀 만 쓰면됩니다. –

3

보기의 너비와 높이를 단독으로 나누고 폭 x 높이의 제곱을 그리는 것은 어떨까요? 당신은 단지 NSPoint를 사용하여 폭 x 높이에 도달 할 때까지 1 씩 증가시킬 수 있습니다.

+0

이것은 고통처럼 보일지 모르나 솔직히 말해서 예상보다 훨씬 강력하고 결과에 매우 만족할 것입니다. – Sneakyness

+1

그렇게 낭비가되지 않습니까? 각 픽셀에 대해 직사각형을 구성하는 4 개의 CGFloat를 업데이트하고 CGContextFillRect (또는 NSRectFill 또는 NSBezierPath의 fillRect : 메서드)를 호출해야합니다. 하나의 픽셀을 그릴 때 엄청난 노력이 필요합니다. – sarnesjo

+0

그 rect는 한 번만 정의 될 것이고, 그 이후에는 위치 나 크기가 바뀌지 않을 것입니다. – Sneakyness

2

Simple Directmedia Layer에는 픽셀 액세스 권한이 있습니다. 그것은 포팅 라이브러리이기 때문에 과도하게 죽일 수도 있지만, 전체 API는 C 언어로되어 있습니다. MacOS API가 사용하는 기본 API가 무엇인지 모르겠습니다. 귀하의 목적에 적합한 지 웹 사이트를 확인하는 것이 가장 좋습니다.

또는 OpenGL 텍스처를 사용할 수 있습니다.

+0

SDL을 살펴 보았습니다. 일반적인 경우에는 좋은 해결책 일 수 있다고 생각합니다. 그러나, 내가 작업하고있는 프로그램은 내가 취하는 과정의 일부이며 외부 라이브러리에 대한 종속성을 최소한으로 유지해야합니다. – sarnesjo

0

가장 좋은 방법은 Core Image입니다. 픽셀 작업을 위해 설계되었으므로 그래픽 카드에서 작업 할 수 있으므로 매우 빠릅니다.