최상단 광고

2012년 4월 9일 월요일

Picture Control의 픽셀 사용법

MFC의 Picture Control을 사용을 하다보면 

저기에 내가 원하는 픽셀을 넣고 싶을 경우가 있다.

예를 들어 툴을 만들때에 동적인 Teuxtre를 미리보기 형식으로 다이얼로그에 넣을 때 말이다

그럴경우에 대한 경우에 한가지 방법은 (사실 이 방법밖에 알아내지 못했다.)

Picture Control을 만들고 Picture Control의 윈도우 핸들을 가지고 비트맵을 생성을 하고 

그에 대한 픽셀 데이터를 가지고 온다. 그리고 Picture Control에 생성한 비트맵을 지정해준다.

그리고 나서 내가 원하는 텍스처나, 랜더 타겟의 비트맵을 얻어와서 앞서 생성한 비트맵의 픽셀 

데이터에 넣어주면 된다. NDL을 사용할 경우는 랜더타겟의 픽셀을 가지고 오는 과정에서 LockReck을

했을 경우에 실패를 하게 되는데 정확한건 아니지만 POOL_DEFAULT로 되어 있을 경우에 실패를 하지 

않나 싶다. 엔진에서 픽셀을 함부로 접근하지 못하게 하기 위해서 그런듯 하다.

그런 경우에 굳이 나처럼 랜더타겟을 보여주고 싶으면, 임의의 섭페이스를 만들고

랜더타겟의 섭페이스를 임의의 섭페이스로 복사를 한다. 이 임의의 섭페이스는 접근 가능한

섭페이스기에 LockReck을 이용하여 접근을 하여 원하는 데이터를 뽑아 올수 있지만

퍼포먼스를 보장을 못한다. 그렇기에 특정 이벤트가 들어올 경우에만 갱신을 하고 영역 자체를

작게 잡으면 실시간은 무리더라도 특정 이벤트시에 갱신만 해준다면 나름(?) 사용이 가능하다.

// 섭페이스 복사
D3DXLoadSurfaceFromSurface(
pDestSurface,   // 대상 섭페이스
NULL, // 색상파렛트인데.. 모름
pDestRect, // 대상의 복사 될 영역
pSrcSurface, // 복사할 섭페이스
NULL, // 색상파렛트인데.. 모름
pSrcRect, // 복사할 섭페이스의 역역
Filter, // 필터는 DX도움말 참조
ColorKey // 컬러키라는데...모름
);


댓글 없음: