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
[75984] GetPixel 속도향상방법...
박찬신 [] 1268 읽음    2020-12-01 11:18
안녕하세요.
소스상에 문제가 있는데 ..확인좀 부탁드려도 될까요?

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쯤 되면 죽어버립니다.

문제점이 뭔지 ..조언좀 부탁드립니다.


+ -

관련 글 리스트
75984 GetPixel 속도향상방법... 박찬신 1268 2020/12/01
75985     Re:GetPixel 속도향상방법... 보리 1247 2020/12/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.