답변 감사드립니다..
위와 같은 방법으로 하니깐 440ms 정도 나오는데요..만족^^
점이 너무 작아서 x,y 상하 좌우 8개 정도 더 찍었더니 3500ms 정도 나오네요....(35만픽셀)
꼭 setpixel을 고집 하는 이유가 Color를 제각각 넣어 줘야 되서 이 함수를 사용 해야 해요..
for(int u=0;u<count;u++){
for(int i=-1;i<2;i++){
for(int j=-1;j<2;j++){
SetPixel(dc,(x[u])+i,y[u]+j,clWhite);
}}}
문제점이 뭐져-.-??
더블 버퍼링이란 검색을 해두 예제가 얼마 없어 이해를 잘 못하겟어요..
memDC가 도화지가 되는거죠? 그 도화지에 어떻게 점을 찍죠?;
장성호 님이 쓰신 글 :
: 3만개를 찍는데 그렇게 느린가요?
: 다음과 같이 20만개의 점을 SetPixel을 찍어도 500ms가 나오지 않던데...
:
:
: void __fastcall TForm1::Button9Click(TObject *Sender)
: {
: //
: int tic=GetTickCount();
: HDC dc=GetDC(this->Handle);
: for(int i=0;i<200000;i++)
: {
: int x=rand()%this->ClientWidth;
: int y=rand()%this->ClientHeight;
: SetPixel(dc,x,y,clRed);
: }
:
: ReleaseDC(Handle,dc);
: tic=GetTickCount()-tic;
: ShowMessage(tic);
: //제 노트북에서 약 400ms
: }
: //---------------------------------------------------------------------------
:
:
: 그리고 님의
코드에 문제가 하나 있습니다.
:
GetDC를 했으면 반드시 ReleaseDC를 해줘야 합니다.
:
:
: //다음과 같이 GetDC , ReleaseDC를 반복할 경우 약 1300ms
: void __fastcall TForm1::Button10Click(TObject *Sender)
: {
: int tic=GetTickCount();
:
: for(int i=0;i<200000;i++)
: {
: int x=rand()%this->ClientWidth;
: int y=rand()%this->ClientHeight;
: HDC dc=GetDC(this->Handle);
: SetPixel(dc,x,y,clRed);
: ReleaseDC(Handle,dc);
: }
: tic=GetTickCount()-tic;
: ShowMessage(tic);
: }
: //---------------------------------------------------------------------------
:
:
: 즉 GetDC를 한번으로 줄이기만 해도 속도가 3배이상 나올것 같습니다.
:
: 그리고 원래 SetPixel 은 느린걸로 알고있습니다.
: 더블버퍼링을 써야 빨라집니다.
: 더블버퍼링이란?
: 1. 먼저 memoryDC에다가 원하는 그림을 다 그리고
: 2. 맨 그림을 다 그린후에 실제 dc에다가 한번에 paint하는 방식입니다.
:
: 그럼..
:
:
:
: 정연진 님이 쓰신 글 :
: : 안녕하세요..초보 빌더 6.0입니다..^^;
: : 제가 파일에서 좌표값을 받아서 화면에 점을 찍는데요..
: : 너무 느리네요. 한줄 읽어서 점찍고 한줄 읽어서 점찍고 하는거 같네요..
: : 한 3만개쯤 되는데 버벅 거리다 끝나버려요....
: :
: : while(fgets(lines,100,fp))
: : {
: : sscanf(lines,"%d,%d",&x,&y);
: : SetPixel(GetDC(this->Handle),x,y,clWhite);
: : }
: : 이런식으로 했는데요..
: :
: : 어떤 다른 좋은 방법이 있을지 고수님들 도와주세요^^;