|
책의 11장에 있는 샘플 추출하는 프로그램인데요..
VC++로 되어 있는것을 볼렌드로 고치는데 힘드네요.
디버그모드로 확인해 봤는데요..
pszFileName 에는 지금 파일이랑 \0\0\0\0\0 .. 이 저장되네요..
그래고 아래에 WriteFile에서 쓰지를 못해요.
필요업는건 뺀다고 빼고 수정 햇는데 뭐가 잘못 된건지..첫번째 WriteFile 에서 return; 되어서
그 다음은 실행이 안되네요...
#define DEFAULT_MEDIA_PATH TEXT("\\\0")
#define DIB_HEADER_MARKER ((WORD)('M'<<8) | 'B')
void __fastcall TForm1::SaveImage(BITMAPINFOHEADER& bmiHeader, BYTE* pDIB)
{
SaveDialog1->Execute();
char pszFileName[MAX_PATH] = "";
AnsiString cFileName = SaveDialog1->FileName;
strcpy(pszFileName, cFileName.c_str());
BITMAPFILEHEADER bmfHeader;
bmfHeader.bfType = DIB_HEADER_MARKER;
bmfHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmfHeader.bfSize = sizeof(bmfHeader) + sizeof(BITMAPINFOHEADER) + bmiHeader.biSizeImage;
bmfHeader.bfReserved1 = 0;
bmfHeader.bfReserved2 = 0;
HANDLE fd = CreateFile(pszFileName, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwLength;
if(!WriteFile(fd, (LPSTR)&bmfHeader, sizeof(bmfHeader), &dwLength, NULL));
return;
if(!WriteFile(fd, (LPSTR)&bmiHeader, sizeof(BITMAPINFOHEADER), &dwLength, NULL));
return;
if(!WriteFile(fd, pDIB, bmiHeader.biSizeImage, &dwLength, NULL));
return;
CloseHandle(fd);
}
|