|
아마 8bit 로 고쳐질때 팔레트에 대한 인덱스 찾아넣느라고 시간이 걸릴겁니다.
그래서 이렇게 해봤더니 빠르더군요...당연하죠..인텍스 찾을 데이터가 적으므로..
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->Width = 4;
bmp->Height = 4;
bmp->PixelFormat = pf8bit;
bmp->Width = img_w;
bmp->Height = img_h;
도움이 될라나요..
머슴.한석복 님이 쓰신 글 :
: TBitmap 을 실시간으로 생성을 해서,
: 이미지를 저장하는 루틴을 작성 했는데, 이상하리만치 시간이 많이 걸려서 디버깅을 해보니까,
:
: PixelFormat 을 변환 하는 과정에서 엄청난 시간을 소비 하더군요.
:
: 간단하게 소스를 기술 하면,
:
: Graphics::TBitmap *bmp = new Graphics::TBitmap();
: bmp->Width = img_w;
: bmp->Height = img_h;
:
: bmp->PixelFormat = pf8bit; <<--------문제의 그 라인..이 라인이 처리 되는데만 1초에 가까운 시간이.
:
: 이미지는 대략 1k x 1k정도 이구요. 그레이스케일로 저장 하고자 하는 거죠.
: 그런데, 이런 방법이 있더라구요. TImage를 하나 동적으로 생성 해서, 거기에 그레이스케일 이미지를 먼저 하나 LoadFromFile로 로딩 한 후에, 그러니까,
:
: TImage *timg = new TImage(this);
: timg->LoadFromFile("sample.bmp");
: 이 timg->Picture->Bitmap을 저장 하는 루틴에 인자로 보내서 처리를 하니까, 정상적인 처리(주어진 시간내에)가 가능 하더군요.
:
: 제가 알고 싶은 것은, pixelformat을 변경 해주는 방법입니다.
: 그냥 직접 소스 레벨에서 프로퍼티를 셋팅 하는것에는 이런 문제가 있고,
: TImage에서 처리하는 것에는 아무 문제가 없어 보이니까 어떤 다른 방법이 있지 않나 해서요.
:
: 아시는 분, 리플좀 부탁 드립니다.
|