|
비슷하게는 하셨는데 효율은 좀 떨어지게 만드셨네요
우선 Bitmap에 대한 도움말을 꼼꼼히 읽어보시는게 필요할 듯 합니다.
각 스캔라인은 ScanLine[]으로 접근하시면 되고 배열로 복사 혹은 배열로부터 복사를 할 때는 ::CopyMemory 등으로 복사하시는게 효율적입니다. 물론 복사해야 할 양은 PixelFormat과 연관이 있죠. 예를 들어 pf32bit인 경우엔 Widthx4를 해 주셔야죠. pf8bit인 경우 Width와 동일할테구요.
그리고... 참고로 하나 더 힌트를 드린다면... 영상정보는 데이터 자체가 클 뿐만 아니라 영상처리는 속도와의 싸움이기 때문에 배열로 복사하지 않고 직접 처리하는 방법을 쓰는 것이 좋습니다.
초보 님이 쓰신 글 :
: 빌더로 영상처리를 시작하는 학생입니다.
: 근데 처음부터 막히네요~
:
: CLX 에서 작업을 하고 있습니다.
: 다음 절차에 의해 영상을 얻고 뿌리고 있습니다.
:
: 1. Qgraphics::TBitmap*gbitmap = new Qgraphics::TBitmap();
:
: 2. gbitmap->LoadFromFile(fileName.c_str());
:
: 3. PaintBox1->Canvas->Draw(0,0,gbitmap);
:
: 근데 영상처리를 하려고 보니까 gbitmap 형식이 맞지 않아서 1차나 2차 포인터 또는 2차배열로 데이터를
: 바꿔야 하는데 그게 잘 안되네요~
:
: <질문1>
:
: unsigned char *ptr;
: for (int y = 0; y < gbitmap->Height; y++)
: {
: ptr = (unsigned char *)gbitmap->ScanLine[y];
: for (int x = 0; x < gbitmap->Width; x++)
: ptr[x] = (unsigned char)y;
: }
:
: 이렇게 ptr 로 1차 포인터로 바꿨는데 이게 맞는지 알고 싶습니다.
: 그리고 이상하게 gbitmap을 Draw 하니까 제대로 안나옵니다.
: 제 생각에는 gbitmap 을 Draw 하는데는 아무 문제 없을 것 같은데 안되네요~
:
:
: <질문2>
:
: 배열이나 포인터로 바꿨다면 영상처리 후 다시 Draw 를 하기 위해 gbitmap 으로 바꿔야 하는데
: 그 방법을 모르겠습니다.
:
: 알려주세요~~~~~~
|