|
즉 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로 모두 바꿔 사용하려는 데 잘 안돼네요. 도와 주세요.
|