2011-07-05 6 views
0

내가 가지고있는 프로그램은 카메라에 setDIbitstodevice을 사용합니다.setDIbitstodevice 터보 C++

SetDIBitsToDevice(PaintBox->Canvas->Handle, 0, 0, 160, 120, 
    0, 0, 0, 120, 
    Image, 
    (LPBITMAPINFO)&mapHead, DIB_RGB_COLORS); 

그리고 :
나는 코드로 작성되어 있음을 볼 수

Image = new unsigned char [ 160 * 120 * 4 ] 

나도 몰라 그것이 무엇을 의미 하는가. 나는 내가 unsigned char의 다른 형태로 Image을 바꾸면, 그림 디스플레이가 또한 바뀔 것이라고 말했지만 나는 그것을했고 나는 아무 것도 얻을 수 없었다.

감사합니다.

+0

그래서 무엇이 문제입니까? 이미지는 "서명되지 않은 char"이 아닙니다. SetDIBitsToDevice 함수에 대한 [문서] (http://msdn.microsoft.com/en-us/library/dd162974.aspx)를 읽었습니까? –

답변

1

unsigned char는 터보 C++에서 바이트 크기를 가지므로 'Image = new ...'행은 160 픽셀 너비, 120 픽셀 높이, 4 바이트 깊이의 이미지에 일부 메모리를 할당합니다. 빨강, 초록, 파랑 ​​및 알파 채널에 대해 4 바이트가 각각 1 바이트가됩니다 (알파 채널을 지원하지는 않지만 그래도 괜찮다고 생각 하긴하지만 필요 이상으로 많은 메모리를 할당하므로 크래시가 발생하지 않습니다. 하지만 아마도 메모리 낭비 일 것입니다.)

이제 SetDIBitsToDevice는 이미지의 픽셀을 가져 와서 핸들을 통해 페인트 상자에 표시합니다. Tee 매개 변수는 대상의 크기 등입니다 (http://msdn.microsoft.com/en-us/library/dd162974(VS.85).aspx 참조). 비트 맵을 늘리려면 (예 : 표시된 크기 변경) StretchDIBits http://msdn.microsoft.com/en-us/library/dd145121(v=VS.85).aspx을 살펴보십시오.

hth

+0

나도 안다. 나는 지금 그림을 가지고있다. 그러나 그것은 거꾸로되어있다, 어떤 생각? – Chang

관련 문제