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
[24357] Re:[bmp와 jpg의 차이...?]
유영인.Chris [cuperido] 1316 읽음    2003-02-18 11:52
개별 포맷을 만들어 사용하시는 것이 좋으실것 같습니다. BMP와 JPEG 의 로딩 속도 차이는 그 차이가 엄청납니다.

허프만식 방법으로 압축을 하는 알고리즘을 직접 만드셔서 BMP 데이터를 하나의 개별 포맷으로 만들어 내시는 것이 좋을 것 같습니다. 허프만식 알고리즘도, 압축 프로그램처럼 구현한다면 오히려 압축 해제 속도가 더 걸릴 수 있으니, 적당한 선에서 자르는 것도 좋으실 것 같습니다.

아니면 GIF, PNG 같은 차선책을 이용하시는 것도 어떠신지요. JPG 보다는 로딩 속도가 빠릅니다.

아래는 아바타를 만들어 볼때 쓰던 압축방법인데 간단한 압축만 하고 있습니다. BMP 특성상 간단한 압축을 해도 압축률이 상당히 좋습니다. 압축은 PHP, 해제는 C++ Builder 에서 하고 있습니다. PHP 소스 밖에 못찾아서 이것밖에 못 올려드리네요.. 꾸벅..

<?

// 자체 압축 알고리즘. 컬러 인덱스화는 PHP 인터프리터의 속도가 너무 나오지 않아 포기. --;
// 현재는 반복 컬러 사용만을 키로 대치하는 루틴이다. 압축률은 약 30%.
function Compress($SOURCE, $SOURCE_COUNT, $HEADER) {

   global             $COMPRESSED_HEADER;
   global             $COMPRESSED_IMAGE;

   $TREE              = array("");
   $KEY_1BYTE         = "";
   $KEY_2BYTE         = "";
   $COMPRESSED_HEADER = $HEADER;


   // 각 ASCII의 사용 횟수를 알아봄
   for($itCount = 0; $itCount < $SOURCE_COUNT; $itCount ++) {
     $HEAD = substr($SOURCE[$itCount], 0, 1);
     $TAIL = substr($SOURCE[$itCount], 1, 1);

     $HEAD_INDEX = ord($HEAD);
     $TAIL_INDEX = ord($TAIL);

     $TREE[$HEAD_INDEX] ++;
     $TREE[$TAIL_INDEX] ++;
   }


   // 사용 할 수 있는 ASCII 코드를 따로 키로 뽑음
   for($itCount = 0; $itCount < 256; $itCount ++) {
     if($TREE[$itCount] == 0) {
       if($KEY_1BYTE == "") {
         $KEY_1BYTE = chr($itCount);
        } else {
         $KEY_2BYTE = chr($itCount);
         break;
       }
     }
   }


   // 모든 ASCII가 다 사용 될때의 처리. 압축 할 수 없음
   if($KEY_1BYTE == "") {
     return;
    } else {
     $COMPRESSED_HEADER = "JF" . $KEY_1BYTE . $KEY_2BYTE . substr($HEADER, 2, 256);
   }


   // 컬러를 압축
   $COLOR_PREVIOUS = "";
   $COLOR_COUNT    = 0;
   $COLOR_STRING   = "";

   for($itCount = 0; $itCount < $SOURCE_COUNT; $itCount ++) {
     if($COLOR_PREVIOUS == $SOURCE[$itCount]) {
       $COLOR_COUNT ++;
      } else {
       if($COLOR_COUNT > 1) {
         if($COLOR_COUNT <= 255) {
           $COLOR_STRING .= $KEY_1BYTE;
           $COLOR_STRING .= chr($COLOR_COUNT);
          } else {
           $COLOR_STRING .= $KEY_2BYTE;
           $COLOR_STRING .= chr($COLOR_COUNT % 256) . chr($COLOR_COUNT / 256);
         }
       }

       $COLOR_STRING   .= $SOURCE[$itCount];
       $COLOR_PREVIOUS  = $SOURCE[$itCount];
       $COLOR_COUNT     = 1;
     }
   }


   // 남은 Count 처리
   if($COLOR_COUNT > 1) {
     if($COLOR_COUNT <= 255) {
       $COLOR_STRING .= $KEY_1BYTE;
       $COLOR_STRING .= chr($COLOR_COUNT);
      } else {
       $COLOR_STRING .= $KEY_2BYTE;
       $COLOR_STRING .= chr($COLOR_COUNT % 256) . chr($COLOR_COUNT / 256);
     }
   }


   $COMPRESSED_IMAGE = $COLOR_STRING;

}

?>


머슴.한석복 님이 쓰신 글 :
: BMP 나 JPEG으로 파일을 저장 할때요..
:
: JPEG이 BMP에 비해서 훨씬 저장 시간이 많이 걸리 잖아요...
: -제가 테스트 해 본 결과로는 약 2-300 MS가 더 걸리던데...
:
: JPEG으로 저장 할때, 시간을 좀 줄이는(BMP와 비슷하게 많이라도) 방법이나,
: 알고리즘이 있으면 좀 가르쳐 주세요.
:
: 즐프 하세요...

+ -

관련 글 리스트
24327 [bmp와 jpg의 차이...?] 머슴.한석복 755 2003/02/17
31873     Re:[bmp와 jpg의 차이...?] 머슴.한석복 720 2003/02/17
31872     Re:[bmp와 jpg의 차이...?] 하느리 773 2003/02/17
24357     Re:[bmp와 jpg의 차이...?] 유영인.Chris 1316 2003/02/18
24395         Re:Re:[bmp와 jpg의 차이...?] 머슴.한석복 1283 2003/02/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.