|
mister 님이 쓰신 글 :
: cc1232 님이 쓰신 글 :
: : 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;
:
: 아 BMP RAW란 것이 지금 YUV2를 RGB로 바꾸라는 것 인가요?
: 아님 이렇게 바뀐 포멧을 다시 RAW로 바꾸고 BMP로 바꾸라는 건가요??
: 또 아님 BMP RAW라는 포멧이 있나요?
헤더 정보 이상함.
BITMAPINFOHEADER bmiHeader;
bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmiHeader.biWidth = m_iWidth;
bmiHeader.biHeight = m_iHeight;
bmiHeader.biPlanes = 1;
bmiHeader.biBitCount = 24;
bmiHeader.biCompression = BI_RGB;
bmiHeader.biSizeImage = 0;
bmiHeader.biXPelsPerMeter = 0;
bmiHeader.biYPelsPerMeter = 0;
bmiHeader.biClrUsed = 0;
bmiHeader.biClrImportant = 0;
|