바쁜시간 질문을 해서 죄송합니다.
지금 제가 , 24비트 비트맵을 16비트 비트맵으로 변환하는 객체를 만들고
있습니다...
그런데.... 꽤 어려운 문제가 생겼습니다.
24비트 비트맵을 16비트 비트맵으로 변환할때....
어떤것은... 칼라가 밀리면서 깨지는 현상이 일어나고,
어떤것은 정상적으로 출력됩니다....
다시말하면, 25x25짜리 24비트 비트맵을 16비트로 변환하면,
칼라가 밀리는 현상이 일어납니다.
그런데....100 x 100 짜리 24비트 비트맵을 16비트로 변환할때는,
정상적으로 출력이 됩니다..
너무나 답답해서, DirectDraw로 뿌리는 도중에, 24비트 칼라값과
16비트 칼라값을 화일로 적어서 (OffObject.txt에 적힙니다)
분석해 보니, 전혀 엉뚱한 값이 나옵니다...
(존재하지 않는 칼라가 나오거나, 나오는 색깔숫자나 위치가 맞지 않습니다.
즉 밀리고, 색깔이 변해서 나옵니다....)
제가 보기엔 DirectDraw문제는 아닌것 같습니다.
OffObject Class라는곳에 코딩이 있는데...
COffObject에서는 비트맵을 로드한후 컨버팅을 해서 오프스크린에
Lock을 걸어서 그래픽을 저장합니다. 그리고 BltFast로 뿌려주는것
밖에 없습니다.
그리고, 16bitBmpTest라는것에서는 mfc로 Dib로드를 한후,
윈도우에 뿌려준 루틴이었는데.... 여기서도 유사한 에러가 납니다
(25x25는 깨지고....100x100에서는 멀쩡히 나옵니다.....
참고로 800x600짜리 비트맵도 전혀 아무 이상없이 출력됩니다.
좀 특정한 숫자일 경우에 에러가 난다는 뜻입니다...)
다시말해서, 로드와 컨버트때 문제가 일어나는것 같습니다.
제 생각엔 전혀 문제가 없어보이는데... 왜 로드할때, 메모리가 이상하게
되는것일까요?
2일간 거의 하루종일 이것만 메달렸는데도... 답이 잘 안나옵니다.
실례가 되지만, 고수님들의 좋은 충고... 부탁드립니다..
- 일단 OffObject class라는 프로젝트에서는 COffObject의
BOOL LoadBmp(LPDIRECTDRAW pdd, char* fname);
BOOL Convert24to16();
이 두개의 함수를 유념해서 봐 주시고,
- 16bitBmpTest 라는 프로젝트 에서는 CDib의
BOOL CDib::Load (LPCTSTR szFileName)
BOOL CDib::Convert24To16(CDib *pDib)
이 두개의 함수를 봐 주십시요...
그리고 그래픽 화일은 25x25.bmp와
200x200.bmp로 나누어져 있습니다
참고로 OffObject class는 DirectX 7.0 버젼으로 개발했고,
각각의 로딩 부분은
COffObject는 InitApp에서 비트맵을 로딩하고,
16bitBmpTest는 16bitBmpTestDoc의 OnBmpload()라는 메뉴 핸들러에서
로드 합니다. (메뉴는 Bmp -> BmpLoad로 들어가면 나옵니다.)
그 외에도 제 코딩의 문제점이나, 에러의 소지, 잘못된 점들을
많이 꼬집어 주십시요......
고수님들에게는 쉬운 문제일지 모르지만, 저에게는 좀 버거운 문제입니다.
그럼...긴 질문 읽어 주셔서 고맙습니다...