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
[75985] Re:GetPixel 속도향상방법...
보리 [] 1262 읽음    2020-12-01 17:25
하시려고 하는 작업이 그림에서 점을 읽어 내는것인가요??

Canvas는 TColor의 배열 이기 때문에 Canvas에서 바로 읽으면 되요.

union urgb {
    TColor color;

    struct {
        BYTE r, g, b, s;
    };
} rgb;

for (int x = 0; x < 100; x++) {
    for (int y = 0; y < 100; y++) {
        rgb.color = this->Canvas->Pixels[x][y];
    }
}

제가 제대로 이해한것이라면 좋겠습니다... ^^

박찬신 님이 쓰신 글 :
: 안녕하세요.
: 소스상에 문제가 있는데 ..확인좀 부탁드려도 될까요?
:
: 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 속도향상방법... 박찬신 1280 2020/12/01
75985     Re:GetPixel 속도향상방법... 보리 1262 2020/12/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.