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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[67] *.ico 를 *.bmp 로 바꾸기
향기 [] 8546 읽음    2000-08-09 00:00
speed button 은 bmp 만 읽을 수 있네요.. 그래서 애써 구한 *.ico 는 필요가 없어 질 수 도 있죠
그래서 그러지 말라고 프로그램 한번 만들어 봤습니다. 참고 하세요

Button1Click 은 직접 변환해서 불러들인것이고..
Button2Click 은 아예 Directory 전체를 변환하는 것입니다.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TIcon *Icon;
  Graphics::TBitmap *Bitmap;
  AnsiString CurrentDir, NewDir, FileName;

  CurrentDir = GetCurrentDir();
  NewDir = CurrentDir + "\\BMP";


  Icon = new TIcon;
  Bitmap = new Graphics::TBitmap;

  Icon->LoadFromFile("button.ico");

  Bitmap->Width  =  (Icon->Width);
  Bitmap->Height =  (Icon->Height);
  Bitmap->Canvas -> Draw(0,0,Icon);

  Bitmap->SaveToFile("button.bmp");

  SpeedButton1->Glyph = Bitmap;

  delete Icon;
  delete Bitmap;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    TIcon *Icon;                         // Icon 을 다룰 객체 선언
    Graphics::TBitmap *Bitmap;           // BitMap 을 다룰 객체 선언
    Icon = new TIcon;                    // Icon 객체 동적생성
    Bitmap = new Graphics::TBitmap;      // BitMap 객체 동적생성


    TSearchRec sr;                       // Director 정보가 저장될 구조체
    AnsiString CurrentDir, NewDir, FileName,ExtName;
    int iAttribute = faAnyFile;          // File -> Directory 도 포함
    int ExtFrom,ExtTo;                   // 확장자 위치

    ExtFrom = 0;
    ExtTo = 0;


  CurrentDir = GetCurrentDir();          // 현재 directory 을 얻는다.
  NewDir = CurrentDir + "\\BMP";
  bool ret = CreateDir(NewDir);          // 현재 directory 밑으로 BMP directory 을 만든다.

  CurrentDir += "/*.*";                  // 현재 directory 에서화일들을 선택한다.

  if(FindFirst(CurrentDir,iAttribute,sr) == 0 ) { // 제일 처음화일로 옮기고
    do {
      if(sr.Attr != faDirectory) {                // directory 가 아니면
        ExtFrom = sr.Name.LastDelimiter(".");
        ExtTo = sr.Name.Length();                   // 확장자를 구하고
        ExtName = sr.Name.SubString(ExtFrom+1,(ExtTo-ExtFrom));
        FileName = sr.Name.SubString(1,ExtFrom-1);

        if(ExtName.LowerCase() == "ico") {                     // 확장자 가 ico 이면
          iIcoCount ++;
          Icon->LoadFromFile(sr.Name);                         // 불러서

          Memo1->Lines->Add("Load : " + sr.Name);
          StatusBar1->Panels->Items[0]->Text = "Load : " + sr.Name;
          Bitmap->Width  =  (Icon->Width);         // Bitmap 으로 그리고
          Bitmap->Height =  (Icon->Height);
          Bitmap->Canvas -> Draw(0,0,Icon);

          Bitmap->SaveToFile(NewDir + "\\" + FileName + ".bmp"); // 새로운 directory 에다가 저장

          Memo1->Lines->Add("Convert Complete : " + FileName + ".bmp");
          StatusBar1->Panels->Items[0]->Text = "Convert Complete : " + FileName + ".bmp";
        }
      }
    }while(FindNext(sr) == 0 );              // directory 의 제일 마지막 화일 까지.

    Memo1->Lines->Add("");

    if(iIcoCount == 0 ) {
      Application->MessageBox("현재 Directory 에는 *.ico 파일이 없습니다.",
                              "ico 없음", MB_OK | MB_ICONERROR);
    }
    else {
      Memo1->Lines->Add(IntToStr(iIcoCount) + " 개의 파일을 변환했습니다.");
    }
    iIcoCount = 0;                           // 변환한 갯수를 초기화 한다.
  }

  FindClose(sr);                             // Directory  resource 제거
                                             // Icon 과 Bitmap 메모리에서 제거
  delete Icon;
  delete Bitmap;


}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
67 *.ico 를 *.bmp 로 바꾸기 향기 8546 2000/08/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.