C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[48994] 델파이와 bcb 코드에 속도차이 ???
장성호 [nasilso] 1470 읽음    2007-04-19 13:32
안녕하세요

델마당 강좌,팁 정보 게시판에 조무영님께서 올려놓으신   "[팁] 색상 선택하기"   샘플코드를  
c++ Builder 바꿔보았습니다.

http://www.delmadang.com/cwb-bin/CrazyWWWBoard.exe?mode=vote&num=4718&db=dmdlec3&backdepth=2


그런데
색상파렛트를 만드는 함수를
delphi와 거의 똑같이 만들었다고 생각되는데

GetTickCout로 시간을 계산해보면
Delphi가 두배이상  빠릅니다.

왜그런것이지 모르겟네요


[조무영님의 delphi코드]

procedure TMain.ColImageUpdate(MainCol: TColor);
type
  PDWORDArray = PIntegerArray;
var
  iX, iY, XMax, YMax: Integer;
  R, G, B, MainR, MainG, MainB: Byte;
  XBoganValue, YBoganValue: Single;
  P: PDWORDArray;

  iTic1,iTic2: Integer;
begin
  iTic1 := GetTickCount;

  with ColImg do
  begin
    XMax:=Width;
    YMax:=Height;
    if Picture.Bitmap.Width <XMax then Picture.Bitmap.Width :=XMax;
    if Picture.Bitmap.Height<YMax then Picture.Bitmap.Height:=YMax;

    MainB:= MainCol and $FF;
    MainG:=(MainCol shr  8) and $FF;
    MainR:=(MainCol shr 16) and $FF;

    for iY:=0 to YMax-1 do
    begin
      P:=Picture.Bitmap.ScanLine[iY];

      for iX:=0 to XMax-1 do
      begin
        XBoganValue:=iX/XMax;
        YBoganValue:=iY/YMax;
        R:=Trunc(((MainR*XBoganValue)+($FF*(1-XBoganValue)))*(1-YBoganValue));
        G:=Trunc(((MainG*XBoganValue)+($FF*(1-XBoganValue)))*(1-YBoganValue));
        B:=Trunc(((MainB*XBoganValue)+($FF*(1-XBoganValue)))*(1-YBoganValue));

        //Canvas.Pixels[iX, iY]:=RGB(R, G, B); // 이건 느려서 못써요
        P[iX]:=(B shl 16) or (G shl 8) or R;
      end;
    end;
    iTic2 := GetTickCount;

    Label2.Caption := IntToStr(iTic2-iTic1);

    Repaint;
  end;
end;


[C++ Builder 변환 코드]

//--------------------------------------------------------------------------
void __fastcall TMain::ColImageUpdate(TColor MainCol )
{

  int iX, iY, XMax, YMax;
  unsigned char R, G, B, MainR, MainG, MainB;
  float XBoganValue, YBoganValue;

//  RGBTRIPLE *pt;
    int *pt;

    int iTic1,iTic2;

    iTic1=GetTickCount();
    XMax=ColImg->Width;
    YMax=ColImg->Height;
    if ( ColImg->Picture->Bitmap->Width <XMax ) ColImg->Picture->Bitmap->Width =XMax;
    if ( ColImg->Picture->Bitmap->Height<YMax ) ColImg->Picture->Bitmap->Height=YMax;

    MainB= MainCol & 0xFF;
    MainG=(MainCol >> 8) & 0xFF;
    MainR=(MainCol >> 16) & 0xFF;

    for( iY=0 ; iY<YMax ;iY++)
    {
      pt=(int *)ColImg->Picture->Bitmap->ScanLine[iY];

      for( iX=0 ; iX< XMax;iX++)
      {
         XBoganValue=iX/(XMax*1.0);
         YBoganValue=iY/(YMax*1.0);

         R=((MainR*XBoganValue)+(0xFF*(1-XBoganValue)))*(1-YBoganValue);
         G=((MainG*XBoganValue)+(0xFF*(1-XBoganValue)))*(1-YBoganValue);
         B=((MainB*XBoganValue)+(0xFF*(1-XBoganValue)))*(1-YBoganValue);

       //ColImg->Canvas->Pixels[iX][iY]=RGB(R, G, B); // 이건 느려서 못써요
       //ColImg->Canvas->Pixels[iX][iY]=((B << 16) | (G << 8) | R);  // 이것도 느림


      pt[iX]=((B << 16) | (G << 8) | R);  //1)
//       pt[iX]=RGB(R, G, B);             //2) 속도 빠름 - 1)번과 비슷함
      //결론::RGB()함수가 느린것이 아니라 ColImg->Canvas->Pixels[][] 함수가 느린것임
      // 그런데 이상하다 그렇게 해도 delphi보다 속도가 느린다 왜 그런것일까?


      }
    }
    iTic2=GetTickCount();
    Label2->Caption=IntToStr(iTic2-iTic1);
    ColImg->Repaint();

}
//-

+ -

관련 글 리스트
48994 델파이와 bcb 코드에 속도차이 ??? 장성호 1470 2007/04/19
49027     Re:델파이와 bcb 코드에 속도차이 ??? 쥐르미온 2077 2007/04/23
49011     Re:델파이와 bcb 코드에 속도차이 - bcb가 delphi보다 못하단 말인가? 장성호 1600 2007/04/20
49018         Re:Re:델파이와 bcb 코드에 속도차이 - bcb가 delphi보다 못하단 말인가? 잿빛날개 1579 2007/04/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.