안녕하세요.
소스상에 문제가 있는데 ..확인좀 부탁드려도 될까요?
HDC hdc = CreateCompatibleDC(ImageViewer->Canvas->Handle);
for(int dX = 0 ; dX < ImageViewer->Width ; dX++)
{
for(int dY = 0 ; dY < ImageViewer->Height ; dY++)
{
unsigned int nRGB[4] = {0,};
TColor color1 = GetPixel(hdc,dX,dY);
nRGB[1] = GetRValue(color1);
nRGB[2] = GetGValue(color1);
nRGB[3] = GetBValue(color1);
}
}
위와같이 GetPixel로 하나씩 이미지갖고오는걸
미리 저장해놓고 받아오면 빠르다고 하여
아래와 같이 변경해보았는데..
HDC hdc = CreateCompatibleDC(ImageViewer->Canvas->Handle);
//
HBITMAP bitmap;
BITMAP bm;
bitmap = CreateCompatibleBitmap(hdc, ImageViewer->Width, ImageViewer->Height);
GetObjectA(bitmap,sizeof(BITMAP), (LPSTR)&bm);
BYTE *pData = NULL;
pData = (BYTE*)malloc(bm.bmWidthBytes * bm.bmHeight);
memset(pData, 0x00, bm.bmWidthBytes * bm.bmHeight);
GetBitmapBits(bitmap, bm.bmWidthBytes * bm.bmHeight, pData);
RGBQUAD *pRgb = (RGBQUAD*)pData;
//
int nPos = 0;
for (int y = 0; y < bm.bmHeight; y++)
{
for (int x = 0; x < bm.bmWidth; x++)
{
nPos = x + (y * bm.bmWidth); //<-이런식으로 위치만 찾아서
BYTE r = pRgb[nPos].rgbRed; //값을불러온다....
BYTE g = pRgb[nPos].rgbGreen;
BYTE b = pRgb[nPos].rgbBlue;
}
}
문제점은.
1. 값이 제대로 나오지 않습니다. (BYTE r,g,b 다 그냥 0으로만..ㅠㅠ)
2.반복돌다가 뻑이납니다.
예를들어 가로세로 100*100 이미지를 불러오게되면 돌려보면
y가 91쯤 되면 죽어버립니다.
문제점이 뭔지 ..조언좀 부탁드립니다.
|