|
pImage에 있는 포맷이 YUV인 상태로 보입니다
그 포맷에다가 BMP헤더만 붙인다고 BMP가 되지는 않습니다
YUV를 BMP RAW로 변환하시고, 헤더를 붙여야 할 것 같네요
mister 님이 쓰신 글 :
: 캡쳐보드에서 YUY2 이미지를 받아서 bmp 포멧으로 바꿔 쓰려 합니다.
: 비트맵 파일로 바꾸면 화면이 깨지네요.
:
: 소스는 다음과 같습니다.
: 무엇이 문제인지 알려주십시요;;
: //////////////////////////////////////////////////////////////////////////////////////////////////
: // 콜백 함수 내용 입니다.
: BITMAPFILEHEADER bmfh;
: BITMAPINFOHEADER bmih;
:
: ZeroMemory(&bmfh, sizeof(bmfh));
: ZeroMemory(&bmih, sizeof(bmih));
:
: bmfh.bfType = 0x4d42; // 'BM'
: bmfh.bfSize = (sizeof(BITMAPFILEHEADER) - 2) + sizeof(BITMAPINFOHEADER) +
: (sizeX * sizeY * 2); //360x240
: bmfh.bfReserved1 = 0;
: bmfh.bfReserved2 = 0;
:
: bmfh.bfOffBits = (sizeof(BITMAPFILEHEADER) - 2) + sizeof(BITMAPINFOHEADER) ;
:
: bmih.biSize=sizeof(BITMAPINFOHEADER);
: bmih.biWidth=sizeX;
: bmih.biHeight=sizeY;
: bmih.biPlanes=1;
: bmih.biBitCount=16;
: bmih.biCompression=0;
: bmih.biSizeImage=sizeX*sizeY*2;
: bmih.biXPelsPerMeter=0;
: bmih.biYPelsPerMeter=0;
: bmih.biClrUsed=0;
: bmih.biClrImportant=0;
:
: TMemoryStream *pMemoryStream = new TMemoryStream();
: pMemoryStream->WriteBuffer(&bmfh, sizeof(BITMAPFILEHEADER) - 2);
: pMemoryStream->WriteBuffer(&bmih, sizeof(bmih));
: //pImage 이미지 소스
: pMemoryStream->WriteBuffer((BYTE*) pImage, bmih.biSizeImage);
: pMemoryStream->Position = 0;
: Image1->Picture->Bitmap->LoadFromStream(pMemoryStream);
:
: delete pMemoryStream;
|