2009-07-31 5 views
0

나는 윈도우에서 프로그래밍 오전 + +. 화면에 DIB를 그리는 금식 방법이 무엇인지 알고 싶습니다. 이미지가 늘어날 수 있습니다.어떤 금식 방법 Windows에서 화면에 큰 DIB를 그릴 수

StretchDIBits보다 빠르며 SetDIBitsToDevice보다 빠릅니다. StretchBits보다 빠릅니다.

높은 신축성을 지니고 있습니다.

감사합니다.

답변

3

API 함수 StretchDIBits은 하드웨어를 활용할 것이라고 생각합니다. 그것 이외에, BitBlt/StretchBlt을보십시오.

또한 StretchDIBits에 관한 일부 other questions이 있습니다.이 경로를 사용하면 살펴볼 수 있습니다.


이 방법으로는 만족스럽지 않지만 그 밖의 다른 정보는 없습니다. CPU가 그렇게 많이 할 수 있습니다. 가능한 경우 작업 결과를 캐시하고 있는지 확인하십시오. updating what you need. 그래픽 카드를 최대한 활용하려면 OpenGL 또는 DirectX을보십시오.

+0

많은 감사! StretchDIBits는 제가 사용했던 것입니다. 좀 더 빠른 API를 원한다. – user25749

+0

사실 대부분의 질문은 나 자신이 묻습니다. 여전히 느립니다 ~~ – user25749

0

Windows 소스 코드를 들여다 보았을 때, Stretchblt는 1980 년대 중반 여름 인턴에 의해 작성되었으며 결코 고쳐지지 않았습니다. 같은 비효율적 인 코드가 모든 버전의 Windows에 적용되었습니다. 몇 가지 Windows 모바일 장치에서 StretchBlt는 2D 하드웨어 가속을 사용하지만 데스크톱 Windows는 사용하지 않습니다. 데스크톱 윈도우에서 DirectDraw를 사용하여 2D 하드웨어 가속을 사용하고 빠른 블리트를 얻으십시오. 내 데스크톱 비디오 게임 제품에는 메모리 버퍼의 비트를 늘린 다음 비트 블릿을 호출하여 디스플레이에 복사하는 스트레치 블렛 코드가 있으며 StretchBlt를 호출하는 것보다 훨씬 빠릅니다.

StretchBlts가 실패한 주된 원인은 코드가 캐쉬/캐쉬되지 않은 메모리의 속도를 완전히 감지하지 못하고 캐쉬가 이미지를 늘릴 때 캐쉬를 처리한다는 것입니다.

+0

DirectDraw는 최근 버전의 DirectX에서 다시 만들어지지 않았다면 꽤 오래 전에 사용되지 않았을 것입니다. – GManNickG

+0

DirectDraw는 DirectInput 및 Direct3D를 포함하는 DirectX의 구성 요소입니다. 더 이상 사용되지 않습니다. – BitBank