네.. 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 인스턴스로 픽셀값이 바로 넘어가는 방법은 없나요?