C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[54627] 아주 허무한 결과.. 해결 되었습니다 ;
김재범 [lucyfer7] 1685 읽음    2008-09-20 12:21
코드 마지막 문제되는 if 문에서 세미콜론 때문에 실행이 안 되었던 거군요 ㅡㅜ
세미콜론 지우고 하니까 정상적으로 저장이 되었습니다. ㅎ


김재범 님이 쓰신 글 :
: 바쁘신 시간 내어 주셔서 이렇게 답변해 주셔서 감사합니다.
:
: 캡쳐 하나 넣어보겠다고 생각해서 시작햇는데, 볼게 많게 힘드네요..
:
: HEXEDITOR  라는 것도 좀 봐야 할것 같은데. 공부라는게 끝이 없네요..
:
:
: 박영목 님이 쓰신 글 :
: : 부산.... 월천.... 박영목입니다.  반갑습니다.....
: :
: : 어제 회사 이사... 좀 어수선 하네요...  그래서 답변할 시간이 생겼습니다.... ㅋㅋㅋㅋ
: :
: :
: :
: : 파일로 어떤 포멧을 저장하려고 한다(뭐 공인된, 자기가 만든 간단한 파일DB나 환경파일은 그냥 그렇게 하셔도
: :
: : 됩니다. 자기가 아니까 ㅋㅋㅋ)
: :
: : 자기가 만들지 않은 포멧은 이런씩으로 하면 안되지요. sizeof(BITMAPFILEHEADER) 이런 표현 사용하지 마세요...
: :
: : 그냥 레퍼런서에 있는 구조체 보고 수작업으로 계산해서 넣어 주세요.
: :
: : sizeof()로 자동 계산하게 되면 시스템의 속도 최적화를 위해 정확한 크기 또는 보다 더 큰 값을 리턴합니다.
: :
: : 이것을 그대로 사용하게 되면 포멧이 틀어져 버립니다.  그리고 이런 작업을 할 때는
: :
: : HEXEDITOR를 꼭 사용하세요... 아주 쉽게 됩니다(그래도 몇시간 가겠지요).
: :
: : 원래의 BMP가 있어야겠지요.... 그림판에서 잘 읽혀지는...
: :
: : 그것을 읽어들여서 파일헤드, BMP헤드, 파레트, DATA 분해 해보고 헥사에티트로 비교해 보고...
: :
: : 그것을 역으로 파일로 씁니다. 쓴 것을 다시 헥사에디터로 읽어 들여서 원본과 비교합니다. 정말 똑같이 1 Byte도
: :
: : 다른 것 없이 동일하다면... 그림판에서 읽혀지겠지요...  그럼 끝입니다. 원리를 알면 간단합니다.
: :
: : 파일로 쓰는 작업을 할 때는 HEXEDITOR 꼭 제발 사용하세요(네트웍 프로그램 할 때는 스나퍼 같은 것 사용하는
: :
: : 것처럼)... 요즘 프로그래머들 안 사용해서 마음이 아픔...
: :
: :
: :
: : 그리고 여기서 필요한 것은 HEXEDITOR와 약간의 실험(코딩), 관찰입니다. 쉽게 될 수 있습니다.
: :
: : 계속 도전해 보십시오...
: :
: :
: :                                                부산에서.... 월천.... 박영목 올렸습니다.
: :
: :
: :
: :
: : 김재범 님이 쓰신 글 :
: : : 책의 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);
: : : }

+ -

관련 글 리스트
54615 WriteFile 에서 이미지를 쓰지를 못해요~ 헬프미 김재범 1255 2008/09/19
54625     Re:WriteFile 에서 ... 테스트 해보지 않고 답변, 따라해 보세요 박영목 1623 2008/09/20
54626         Re:Re:WriteFile 에서 ... 테스트 해보지 않고 답변, 따라해 보세요 김재범 1641 2008/09/20
54627             아주 허무한 결과.. 해결 되었습니다 ; 김재범 1685 2008/09/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.