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
[52986] 실제로 제가 필요한 부분은 BYTE array가 필요합니다. 이것을 다른 Function에 넘겨야 해서요.
그 아이 [tsirorret] 1171 읽음    2008-04-02 12:22
즉 BMP의 데이타 부분을 그대로 RGBA로 바꿔 이를 인자로 넘겨야 하는데
for loop를 돌려 바꾸는 부분을 잘 이해하지 못했습니다.
급하게 하는 바람에 여기에 도움을 청하는 것이니 도와 주십시요.


Lyn 님이 쓰신 글 :
: TImage 하나 올려놓고 형식을 32비트로 설정하면 자동으로 바뀝니다 =_=a
:
: 그 아이 님이 쓰신 글 :
: : CString Path;                   // 읽어 들일 비트맵 경로   
: :     HANDLE hFile;                   // 읽어들일 비트맵 파일 핸들
: :     DWORD fileSize, dwRead;         // 비트맵 정보   
: :     BITMAPFILEHEADER* bmpFileHeader;// 비트맵 파일헤더 구조체
: :     BITMAPINFOHEADER* bmpInfoHeader;// 비트맵 인포헤서 구조체
: :     long bmpWidth, bmpHeight;       // 비트맵 너비 높이
: :     long bmpRealWidth;              // 비트맵은 실제로 메모리
: :     RGBTRIPLE* rgbValue;            // 비트맵 픽셀 값
: :
: :
: :         Path = odia.GetPathName();   // 파일 경로
: :
: :         // 파일 열기
: :         hFile = CreateFile(LPSTR(LPCTSTR(Path)), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
: :
: :         if(hFile == INVALID_HANDLE_VALUE) {
: :             AfxMessageBox("파일을 읽을 수 없습니다.\n파일을 확인 해 주세요!");
: :             return;
: :         }
: :
: :         fileSize = GetFileSize(hFile, NULL);                    // 파일사이즈 구함
: :         bmpFileHeader = (BITMAPFILEHEADER*)malloc(fileSize);    // 파일 크기만큼 할당
: :         ReadFile(hFile, bmpFileHeader, fileSize, &dwRead, NULL);// 핸들을 이용해 파일을 메모리로 복사
: :         CloseHandle(hFile);
: :
: :         // 비트맵 정보 구조체의 포인터로 전환해 정보구조체를 사용 가능하도록 함
: :         bmpInfoHeader = (BITMAPINFOHEADER*)((PBYTE)bmpFileHeader+sizeof(BITMAPFILEHEADER));
: :
: :         // 비트맵 정보 구조체를 이용해 비트맵의 가로 세로를 구함
: :         bmpWidth = bmpInfoHeader->biWidth;
: :         bmpHeight = bmpInfoHeader->biHeight;
: :         // 비트맵은 실제 메모리에 저장된 데이터는 32비트 단위로 저장되기 때문에 나머지 부분을 맞추기 위해 실제 너비를 구한다.
: :         bmpRealWidth = HBYTES(bmpWidth, 24);
: :
: :         // 비트맵의 실제 픽셀 값의 포인터를 얻음
: :         rgbValue = (RGBTRIPLE*)((PBYTE)bmpFileHeader + bmpFileHeader->bfOffBits);
: :
: :         // 비트맵 픽셀을 참조해서 프로그래밍 함
: :         // 비트맵은 정보가 뒤집어 져 있기 때문에
: :         // 뒤집어서 출력 해야함
: :         unsigned int a, b;
: :         unsigned int size = bmpWidth*bmpHeight;
: :         BYTE *ARGB = new BYTE[size];
: :
: :         b = 0;
: :         for(a=0; a<size; ++a) {
: :             rgbValue = (RGBTRIPLE*)((PBYTE)bmpFileHeader + bmpFileHeader->bfOffBits + a);
: :             ARGB[b] = rgbValue->rgbtBlue;
: :             b++;
: :             ARGB[b] = rgbValue->rgbtGreen;
: :             b++;
: :             ARGB[b] = rgbValue->rgbtRed;
: :             b++;
: :             if(rgbValue->rgbtBlue == 0xFF && rgbValue->rgbtGreen == 0x00 && rgbValue->rgbtRed == 0xFF){
: :                 ARGB[b] = 0x00;
: :                 b++;
: :             }
: :             else{
: :                 ARGB[b] = 0xFF;
: :                 b++;
: :             }
: :         }
: :
: : ///// ARGB로 모두 바꿔 사용하려는 데 잘 안돼네요. 도와 주세요.

+ -

관련 글 리스트
52983 BMP 파일에서 데이타 부분을 RGB에서 RGBA로 바꿔 사용하려는데.. 도와 주세요. 그 아이 2809 2008/04/01
52991     Re:BMP 파일에서 데이타 부분을 RGB에서 RGBA로 바꿔 사용하려는데.. 도와 주세요. 0 2090 2008/04/02
53002         감사합니다. 그 아이 1058 2008/04/03
52986         실제로 제가 필요한 부분은 BYTE array가 필요합니다. 이것을 다른 Function에 넘겨야 해서요. 그 아이 1171 2008/04/02
52990             Re:실제로 제가 필요한 부분은 BYTE array가 필요합니다. 이것을 다른 Function에 넘겨야 해서요. 보리 1687 2008/04/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.