유영인 Cuperido 님이 쓰신 글 :
: 네.. Pixels은 속도가 엄청나게 느립니다.
:
: 특히나 Image1의 경우에는 자동 Refresh까지 지원하니,
: 같은 조건을 놓고 보았을때, 사용자 측면에서 더 보완해주는
: C++ Builder가 VC++보다 느릴 수 밖에 없습니다.
:
: 하지만, VC++ 와 조건을 같게끔 해서 메모리 작업을 해준다면,
: 문제는 달라지겠지요..?
:
: 말씀 드린대로 Scanline을 사용하시면 됩니다.
: 다만, 메모리 접근 방식과 똑같으므로 Bitmap Format 을 정확히 맞춘후에 사용하셔야 합니다.
: (Image1->Picture->Bitmap->PixelFormat = pf24bit; 등과 같이)
:
: 사용 방법은 아래에 있는 이전 답변을 참고해주세요. (찾아보시면 몇개 더 있으실겁니다)
:
:
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=18840
:
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=28061
:
: 그리고 하나 팁, 처리 속도가 많을때, 메모리 주소 변동이 가급적 없도록 처리해주세요.
: Y, X for 문의 순서를 Y를 먼저 도느냐, X를 먼저 도느냐에 따라 속도 차이가 날 수 있습니다.
: (물론 님 소스에 맞는 순서를 택해야 겠지만요. :D)
:
:
: cuperido
:
: 아피 님이 쓰신 글 :
: : 제가 영상처리를 공부하고 있습니다.
: :
: : 그런데 볼랜드는 영상을 VC++처럼 뿌려주니 오래 걸리더군요.
: :
: : 그런데 영상처리는 대부분 그레이 에서 작업을 하기 때문에
: :
: : 이미지 자체를 처리 하는것이 아니고
: :
: : 영상을 unsigned char 배열에 집어 넣고 처리후
: :
: : 다시 이미지에 뿌려주는 형식인데...
: :
: : 지금 저는
: :
: : a : 영상이 처리되고 저장 되는 배열
: :
: : for(i=0;i<height;i++)
: : for(j=0;j<width;j++)
: : Image1->Canvas->pixels[j][i] = RGB(a[i][j],a[i][j],a[i][j]);
: :
: : 이런 형식으로 하는데 출력 시간이 엄청 걸리는군요.
: :
: : 속도가 생명인 영상처리에서...ㅡㅡ;
: :
: : 그래서 여기 저기 찾다보니
: :
: : Image->Canvas->Draw()이 함수가 있던데...
: :
: : 문제는 함수의 매개변수가 Graphics::TBitmap 밖에 못들어 가더군요.
: :
: : 결국 Graphics::TBitmap 인스턴스를 만들어서 저리로 데이터를 넣는데
: :
: : b : Graphics::TBitmap의 인스턴스
: :
: : for(i=0;i<height;i++)
: : for(j=0;j<width;j++)
: : b->Canvas->pixels[j][i] = RGB(a[i][j],a[i][j],a[i][j]);
: :
: : Image1->Canvas->Draw(0,0,b);
: :
: : 이런 식으로 해야 되는건지...
: :
: : 이러면 결국 for문이 돌아가는데 걸리는 부하는 똑같다고 생각하기 때문에...
: :
: : Graphics::TBitmap 인스턴스로 픽셀값이 바로 넘어가는 방법은 없나요?