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
[55829] rgbtriple 안의 데이터 2차원 배열로 옮길때
임오성 [] 1657 읽음    2009-01-19 13:44
rgbtriple 안의 저장된 픽셀당 색상정보를 2차원 배열로 옮기려고 합니다.
만약 10*10 픽셀의 bmp 를 받으면 10*10 의 2차원 배열 생성후 픽셀 하나하나 조사해서 그갑이 흰색이면 0을 대입 다른경우에는 1대입하는 알고리즘입니다.
그런데 나중에 디버깅을 해보면 이차원배열에는 그림과 전혀 맞지않는 값이 대입되어있습니다.
RGBTRIPLE 을 접근하는 방법이 잘못된건지......

소스는 다음과 같습니다.
   
                #define HBYTES(w,b) ((((w)+(b))&~31)/8)
               CString path;
               HANDLE hFile;
               DWORD fileSize,dwREAD;
              BITMAPFILEHEADER *bmpfileheader1;
               BITMAPINFOHEADER *bmpinfoheader1;
             LONG bmwidth,bmheight;
                long bmrealwidth;
              RGBTRIPLE* rgb_value;

int rgblist [10][10];

                char file_direct[]="All Files (*.*)|*.*|Bit Map Files (*.bmp)|*.bmp||";
    CFileDialog dlg(TRUE, "bmp", "*.bmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, file_direct, NULL);
    dlg.DoModal();
    path=dlg.GetPathName();
    hFile=CreateFile(LPSTR(LPCTSTR(path)),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    fileSize=GetFileSize(hFile,NULL);
    bmpfileheader1=(BITMAPFILEHEADER*)malloc(fileSize);
    ReadFile(hFile,bmpfileheader1,fileSize,&dwREAD,NULL);
    CloseHandle(hFile);
    bmpinfoheader1=(BITMAPINFOHEADER*)((PBYTE)bmpfileheader1+sizeof(BITMAPFILEHEADER));
    bmwidth=bmpinfoheader1->biWidth;
    bmheight=bmpinfoheader1->biHeight;
    bmrealwidth=HBYTES(bmwidth,24);
    rgb_value=(RGBTRIPLE*)((PBYTE)bmpfileheader1+bmpfileheader1->bfOffBits);
    int num=1;
    for(int i=0;i<bmwidth;i++)// 이부분이 픽셀값을 2차원배열로 옮기는 부분입니다.
    {

        for(int j=0;j<bmheight;j++)
        {
            if(rgb_value->rgbtBlue!=255)
            {
                rgblist[i][j]=1;
            }
            if(rgb_value->rgbtGreen!=255)
            {
                rgblist[i][j]=1;
            }
            if(rgb_value->rgbtRed!=255)
            {
                rgblist[i][j]=1;
            }
            if((rgb_value->rgbtBlue==255) &&(rgb_value->rgbtGreen)&&(rgb_value->rgbtRed))
            {
                rgblist[i][j]=0;
       
            }
            rgb_value++;
            num++;
        }
    }

   
  }

+ -

관련 글 리스트
55829 rgbtriple 안의 데이터 2차원 배열로 옮길때 임오성 1657 2009/01/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.