|
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++;
}
}
}
|